2013-10-02 49 views
6

Używam YQL, aby pobrać kilka stron, z których niektóre mogą być w trybie offline (oczywiście nie wiem, które z nich). Używam tej kwerendy:Uzyskiwanie adresów URL podczas ładowania wielu adresów URL za pomocą YQL

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

Gdzie pierwszy i ostatni są rzeczywiste strony, a druga oczywiście nie istnieje. Dwa wyniki są zwracane, ale adres URL miejsca, w którym zostały załadowane, nie pojawia się nigdzie. Więc jaki byłby sposób, aby dowiedzieć się, która strona html należy do którego adresu URL, jeśli nie wszystkie strony w kwerendzie są ładowane?

+0

Nie rozumiem. "* ale adres URL z miejsca, w którym zostały załadowane, nie pojawia się nigdzie *" czy spodziewasz się, że powyższy kod to zrobi? "* dowiedzieć się, która strona html należy do którego URL *" eing ??? – Oriol

+0

Myślałem, że to było jasne, przepraszam! Pozwól mi to wyjaśnić. Ładuję kilka adresów URL, niektóre z nich są ładowane, a następnie załadowane adresy są umieszczane w tablicy i odsyłane do mnie. Problem polega na tym, że: Nie mam podpowiedzi, który adres URL, o który pytam, odpowiada każdemu elementowi tablicy. Więc zamiast kodu, potrzebowałabym pleców (adresu URL, danych), aby wiedzieć, które dane odpowiadają adresowi URL i które adresy nie zostały załadowane. –

Odpowiedz

3

Niestety, nie wiem, w jaki sposób można uzyskać parę klucz => wartość w odpowiedzi, gdzie klucz jest adresem URL, a wartość jest odpowiedzią html. Ale można spróbować następujące zapytanie i sprawdzić, czy spełnia on swoje sprawy zastosowanie:

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'" 

Wypróbuj go here. Przed uruchomieniem zapytania można wykonać czynność w tablicy url w jednostce queries, podobnie jak ['http://www.whooma.net','http://www.dfdsfsdgsfagdffgd.com','http://www.cnn.com']. Możemy nazwać tę tablicę A Po wykonaniu iteracji z odpowiedzią z zapytania YQL, adres URL, który nie istnieje, zwróci wartość zerową. Odpowiedź próbki z powyższego zapytania:

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

Tak na zakończenie, można iteracyjne nad tablicę A i odpowiedzi z YQL. Pierwszy element tablicy A powinien odpowiadać pierwszemu elementowi results (wyniki wewnętrzne) tej odpowiedzi YQL. tj. Tworzysz hashmap z dwóch tablic. Wiem, że odpowiedź jest długa, ale myślę, że była potrzebna. Daj mi znać, jeśli wystąpi jakiekolwiek zamieszanie.

1

Możesz dowiedzieć się, które adresy nie ładują się za pomocą flagi diagnostycznej YQL. Flaga diagnostyczna spowoduje, że odpowiedź będzie zawierać właściwość diagnostics z tablicą url, która wskazuje, czy znaleziono odpowiednie serwery. Przypuszczalnie po wyeliminowaniu adresów URL, które nie zostały załadowane, strony wyników będą porównywane z pozostałymi adresami URL.