Có cách nào để sử dụng các dịch vụ web bên ngoài và hiển thị kết quả trong Lượt xem không?


11

Tôi có một dịch vụ web bên ngoài, có thể được truy cập bằng cách sử dụng lệnh gọi HTTP (với các tham số được truyền dưới dạng chuỗi truy vấn) và trả về kết quả ở định dạng XML.

Tôi muốn sử dụng Drupal để truy cập dịch vụ web đó (với các tham số mong muốn) và hiển thị kết quả bằng Chế độ xem.

Đây là một truy vấn mẫu và kết quả thu được từ dịch vụ web tôi đang sử dụng.

Truy vấn: http: //localhost/query.php? Cy = in & q = abcd & cat = 22
Kết quả:

<?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>  

Câu trả lời:


4

Các giải pháp được tư vấn dựa trên việc đưa dữ liệu vào cơ sở dữ liệu trước, sau đó hiển thị nó trong Chế độ xem.

Một cách khác là truy vấn dịch vụ trực tiếp từ Lượt xem, bằng cách sử dụng phụ trợ truy vấn tùy chỉnh. Kiểm tra http://drupal.org/node/958270 để biết các liên kết đến các phụ trợ tùy chỉnh mà bạn có thể sử dụng làm ví dụ để viết riêng của mình (nó không phải là nhiều công việc)


Chắc chắn, nhưng lợi thế của việc đưa dữ liệu vào db trước tiên không chỉ đơn giản, nó còn có nghĩa là lưu trữ dữ liệu. Truy vấn kho dữ liệu cục bộ luôn nhanh hơn dịch vụ bên ngoài.
Alex Weber

Nhưng, drupal.org/node/958270 sử dụng Views3.0. Có cách nào để không sử dụng Views 3.0 và cũng không cần lưu dữ liệu vào db không? Chỉ cần sử dụng thời gian thực dịch vụ web và hiển thị dữ liệu trên trang.

Tất nhiên, điều đó không cần phải nói.
Bojan Zivanovic

Số lượt xem 2 rất gần cuối đời, vì vậy tất cả các tính năng mới đều có trong Lượt xem 3.
Bojan Zivanovic

@Alex: Bạn có thể sử dụng Chế độ xem 3 với Dịch vụ web bên ngoài và vẫn lưu trữ kết quả.
s.Daniel

3

Các Feeds mô-đun có thể kéo về nội dung và biến nó thành nút. Nguồn cấp dữ liệu XPath Parser sẽ cho phép bạn phân tích tệp xml và thẻ ánh xạ tới các trường. Sau đó, bạn có thể sử dụng Chế độ xem để hiển thị nội dung như bình thường.


1

Tôi chắc chắn có một giải pháp thanh lịch hơn ngoài kia, nhưng tôi đã làm điều này trong quá khứ với các nguồn cấp dữ liệu twitter và nó hoạt động rất tốt. Đây là của tôi về nó:

  • Tạo loại nội dung để lưu trữ kết quả của bạn và thiết lập các trường cần thiết để phù hợp với nội dung bạn sẽ tiêu thụ
  • Tạo một mô-đun triển khai hook_cron () và định kỳ tiêu thụ dịch vụ web và lưu trữ kết quả dưới dạng các nút

Bước thứ hai có thể đạt được bằng cách lập trình tạo các thể hiện nút:

$node = new stdClass();
$node->title = 'title';
$node->my_custom_field['und'][0]['value'] = 'my custom value';
// fill all your other fields
node_save($node);
  • Cách tốt nhất để tránh trùng lặp khi tạo các nút theo chương trình là so sánh ID (hoặc dấu thời gian hoặc bất cứ điều gì) về kết quả của dịch vụ web với mục nhập gần đây nhất trong cơ sở dữ liệu:
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

Ví dụ trên có vẻ hơi khó hiểu nhưng thực sự không phải vậy: Tôi đã tạo một loại nội dung "hình ảnh" có trường tùy chỉnh "image_id". Đây chỉ là một cách thủ công để lấy ID cho nút được tạo gần đây nhất của loại đó.

  • Vì vậy, bây giờ bạn có một loại nội dung cụ thể mà bạn tự động điền vào thời gian ... lợi nhuận! Bạn có thể sử dụng Chế độ xem để hiển thị dữ liệu theo bất kỳ cách nào bạn muốn vì dữ liệu đó ở dạng các nút Drupal thông thường! :)

Hi vọng điêu nay co ich!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.