2013-10-02 22 views
6

Tôi đang sử dụng YQL để tìm nạp một loạt trang, một số trong số đó có thể ngoại tuyến (rõ ràng là tôi không biết cái nào). Tôi đang sử dụng truy vấn này:Lấy lại url trong khi tải nhiều url với YQL

SELECT * FROM html WHERE url IN ("http://www.whooma.net", "http://www.dfdsfsdgsfagdffgd.com", "http://www.cnn.com") 

Nơi đầu tiên và trang cuối cùng là trang web thực tế, trong khi trang web đầu tiên và trang cuối thực tế không tồn tại. Hai kết quả thực sự được trả lại nhưng url từ nơi chúng được tải không xuất hiện ở bất kỳ đâu. Vì vậy, những gì sẽ là cách để tìm ra trang html thuộc về url nào, nếu không phải mọi trang trong truy vấn được nạp?

+0

Tôi không hiểu. "* nhưng url từ nơi chúng được tải không xuất hiện ở bất cứ nơi nào *" bạn có mong đợi mã ở trên để làm điều đó không? "* tìm hiểu trang html nào thuộc url *" eing ??? – Oriol

+0

Tôi nghĩ rằng nó đã được rõ ràng, xin lỗi! Hãy để tôi giải thích điều đó một lần nữa. Tôi tải một loạt các url, một số trong số đó được tải, sau đó các url được tải được đóng gói vào một mảng và gửi lại cho tôi. Vấn đề là: Tôi không có gợi ý về url mà tôi yêu cầu không mọi phần tử trong mảng tương ứng với. Vì vậy, thay vì chỉ là mã, tôi cần trở lại các cặp (url, dữ liệu) để tôi biết dữ liệu nào tương ứng với url nào và url nào không được tải. –

Trả lời

3

Thật không may, tôi không biết cách bạn có thể nhận được cặp khóa => giá trị trong phản hồi trong đó khóa là url và giá trị là phản hồi html. Tuy nhiên, bạn có thể thử truy vấn sau và xem truy vấn đó có đáp ứng trường hợp sử dụng của bạn hay không:

select * from yql.query.multi where queries="select * from html where url='http://www.whooma.net';select * from feed where url='http://www.dfdsfsdgsfagdffgd.com';select * from html where url='http://www.cnn.com'" 

Hãy thử nó here. Những gì bạn có thể làm trước khi kích hoạt truy vấn, duy trì thứ tự trong một mảng của url trong số queries như vậy ['http://www.whooma.net','http://www.dfdsfsdgsfagdffgd.com','http://www.cnn.com']. Chúng ta có thể gọi mảng này A Khi bạn lặp qua phản hồi từ truy vấn YQL, url không tồn tại sẽ trả về giá trị rỗng. Một câu trả lời mẫu từ các truy vấn trên:

<results> 
    <results> 
    // Response from select * from html where url='http://www.whooma.net'. This should be some html 
    </results> 
    <results> 
    // Response from select * from feed where url='http://www.dfdsfsdgsfagdffgd.com'. This should be null. 
    </results> 
    <results> 
    // select * from html where url='http://www.cnn.com'. This should also be some html 
    </results> 
</results> 

Vì vậy, trong Tóm lại, bạn có thể lặp qua mảng A và phản hồi từ YQL. Phần tử đầu tiên của mảng A phải tương ứng với phần tử results (kết quả bên trong) đầu tiên của phản hồi YQL đó. tức là Bạn đang tạo một băm từ hai mảng. Tôi biết câu trả lời là dài nhưng tôi nghĩ rằng nó là cần thiết. Hãy cho tôi biết nếu có bất kỳ sự nhầm lẫn nào.

1

Bạn có thể tìm ra url nào không tải bằng cách sử dụng cờ chẩn đoán YQL. Cờ chẩn đoán sẽ gây ra phản hồi bao gồm thuộc tính diagnostics với một mảng url cho biết liệu các máy chủ tương ứng đã được tìm thấy hay chưa. Có thể, khi bạn loại bỏ các url không tải, các trang kết quả sẽ khớp với các url còn lại.