외부 웹 서비스를 사용하고 뷰에 결과를 표시하는 방법이 있습니까?


11

HTTP 호출 (쿼리 문자열로 전달 된 매개 변수 사용)을 사용하여 액세스 할 수있는 외부 웹 서비스가 있으며 결과를 XML 형식으로 반환합니다.

Drupal을 사용하여 원하는 매개 변수로 해당 웹 서비스에 액세스하고 Views를 사용하여 결과를 표시하고 싶습니다.

이들은 샘플 쿼리이며 사용중인 웹 서비스에서 얻은 결과입니다.

쿼리 : http : //localhost/query.php? cy = in & q = abcd & cat = 22
결과 :

<?xml version="1.0"?>
<results>
<Jobs>
    <Job ID="111">
        <Title>Test one</Title>
        <Summary>Test one summary</Summary>
        <DateUpdated Date="2011-04-04 18:03:00">4/4/2011</DateUpdated>
        <Location>
            <Country>India</Country>
            <City>Delhi</City>
        </Location>
        <CompanyName>Test Company</CompanyName>
    </Job>
    <Job ID="222">
        <Title>Test two</Title>
        <Summary>Test two summary</Summary>
        <DateUpdated Date="2011-04-04 18:03:00">4/4/2011</DateUpdated>
        <Location>
            <Country>India</Country>
            <City>Chennai</City>
        </Location>
        <CompanyName>Test company</CompanyName>
    </Job>
</Jobs> 
</results>  

답변:


4

권장되는 솔루션은 먼저 데이터를 데이터베이스로 가져온 다음보기에 표시하는 것입니다.

대안은 사용자 지정 쿼리 백엔드를 사용하여 뷰에서 직접 서비스를 쿼리하는 것입니다. 체크 아웃 http://drupal.org/node/958270 자신을 작성하기위한 예제로 사용할 수있는 사용자 정의 백엔드에 대한 링크 (가 많은 일이 아니다)


물론 데이터를 db로 가져 오는 이점은 단순성 이상의 것이 아니라 데이터 캐싱을 의미합니다. 로컬 데이터 스토어 쿼리는 항상 외부 서비스보다 빠릅니다.
Alex Weber

그러나 drupal.org/node/958270Views3.0 을 사용하고 있습니다. Views 3.0을 사용하지 않고 DB에 데이터를 저장할 필요가없는 방법은 무엇입니까? 웹 서비스를 실시간으로 사용하고 페이지에 데이터를 표시하십시오.

물론 그것은 말할 것도 없습니다.
Bojan Zivanovic

아니요. Views 2는 거의 끝났습니다. 그래서 모든 새로운 기능이 Views 3에 있습니다.
Bojan Zivanovic

@Alex : 외부 웹 서비스와 함께 뷰 3을 사용하고 결과를 계속 캐시 할 수 있습니다.
s.Daniel

3

피드 모듈은 내용에 끌어와 노드으로 바꿀 수 있습니다. Feeds XPath Parser 를 사용하면 xml 파일을 구문 분석하고 태그를 필드에 매핑 할 수 있습니다. 그런 다음보기를 사용하여 컨텐츠를 정상적으로 표시 할 수 있습니다.


1

더 우아한 솔루션이 있다고 확신하지만 과거에는 트위터 피드 로이 작업을 수행했으며 정상적으로 작동합니다. 여기에 내가 가져 가라.

  • 결과를 저장할 컨텐츠 유형을 작성하고 소비 할 컨텐츠와 일치하도록 필드를 설정하십시오.
  • hook_cron () 을 구현 하고 주기적으로 웹 서비스를 소비하고 결과를 노드로 저장 하는 모듈을 만듭니다.

프로그래밍 방식으로 노드 인스턴스를 작성하여 두 번째 단계를 수행 할 수 있습니다.

$node = new stdClass();
$node->title = 'title';
$node->my_custom_field['und'][0]['value'] = 'my custom value';
// fill all your other fields
node_save($node);
  • 프로그래밍 방식으로 노드를 만들 때 중복을 피하는 가장 좋은 방법은 웹 서비스 결과의 ID (또는 타임 스탬프 등)를 데이터베이스의 최신 항목과 비교하는 것입니다.
SELECT fdfpi.field_picture_id_value FROM field_data_field_picture_id fdfpi INNER JOIN node n ON fdfpi.entity_id = n.nid AND fdfpi.entity_type = 'node' WHERE n.type = 'picture' ORDER BY n.created DESC LIMIT 1

위의 예제는 다소 혼란스러워 보이지만 실제로는 그렇지 않습니다. 사용자 정의 필드 "picture_id"가있는 "picture"컨텐츠 유형을 작성했습니다. 해당 유형의 가장 최근에 생성 된 노드의 ID를 검색하는 수동 방법입니다.

  • 이제 cron 시간에 자동으로 채워지는 특정 콘텐츠 유형이 있습니다. 뷰를 사용하여 일반적인 ol 'Drupal 노드 형태로 데이터를 원하는 방식으로 표시 할 수 있습니다! :)

도움이 되었기를 바랍니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.