2011-12-26 12 views
5

używam YQL aby uzyskać listę kanałów, na przykład:Dołącz dodatkową pola w kwerendy wybierającej

SELECT title, link, pubDate FROM rss 
    WHERE url IN ('.implode("','", array_values($urls)).') 

$urls zawierający adresy URL pasza:

$urls = array(
    'delicious' => 'http://feeds.delicious.com/v2/rss/foo', 
    'delicious' => 'http://feeds.delicious.com/v2/rss/anotherfoo', 
    'lastfm' => 'http://ws.audioscrobbler.com/1.0/user/foo/recenttracks.rss', 
    ... 
); 

I dostać tablicę przedmioty z polami tytuł/link/pubdate. Oprócz pola "link", nie otrzymuję żadnych informacji, które mogłyby mi powiedzieć, skąd pochodzi.

Jak mogę dołączyć dodatkowe pole z array_keys($urls), które odpowiada adresowi URL (wartości)? Zasadniczo muszę pole, które mówi mi, z jakim miejscu ma element pochodzą, jak delicious, lastfm itp

Dla LastFM mogę sprawdzić z strpos jeśli „last.fm” łańcuch jest obecny w $item['url'], ale pyszne linki nie jest to możliwe :(


+0

Myślę, że musisz zmienić zapytanie YQL dla tego, więc wiersz wyniku ma pole, które pokazuje, do którego adresu URL został zażądany. Czy próbowałeś dodać adres URL do pól SELECT? Nie bardzo znany w YQL, ale prawdopodobnie istnieje sposób. – hakre

Odpowiedz

1

Otrzymuję szereg elementów z polami tytuł/link/pubdate. Oprócz pola "link", nie otrzymuję żadnych informacji, które mogłyby mi powiedzieć, skąd pochodzi.

Aby uzyskać informacje, z którego każdy element pochodzi, dodać pole source:

SELECT title, link, pubDate, source FROM rss 
    ... 

Rezultatem będzie wówczas zawierać source element każdego wpisu, który ma atrybut url który zawiera adres URL element został pobrany z:

<results> 
    <item> 
     <title>Git Immersion - Brought to you by EdgeCase</title> 
     <pubDate>Wed, 21 Dec 2011 22:15:44 +0000</pubDate> 
     <link>http://gitimmersion.com/</link> 
     <source url="http://feeds.delicious.com/v2/rss/geek">geek's links</source> 
    </item> 

The YQL Demo.

Możesz zajrzeć na wszystkich polach za pomocą *, to jak się dowiedziałem o polu source:

SELECT * FROM rss 
    WHERE url IN ('http://feeds.delicious.com/v2/rss/geek', 'http://feeds.delicious.com/v2/rss/foo') 

YQL Query Demo

myślę, że powinien odpowiedzieć na to pytanie. Aby zmniejszyć ilość przesyłanych danych, można również wybrać tylko atrybut url źródła tak:

SELECT title, link, pubDate, source.url FROM rss 
    ... 

Zobacz także Using YQL to load and convert RSS feeds really, really fast i How to use YQL to merge 2 RSS feeds sorted by pubDate?.


Poniżej starszy komentarz na YQL składnię:

Proszę zwrócić uwagę, że implode("','", array_values($urls)) pozostawi swój YQL w nieprawidłowej składni:

... IN (Urla '' urlB ',' urlC)

Widzisz brakujące pojedyncze cytaty na początku i na końcu? Dodaj je:

"'".implode("','", $urls)."'" 

i powinieneś czuć się dobrze. Przynajmniej powinieneś mieć jeden błąd mniej.

+0

OK, to był tylko literówka na moje pytanie :) Wciąż muszę się dowiedzieć, jak dodać moje pole ... – Alex

+0

@Alex: Dodałem, jak możesz sprawić, by twoje pole powróciło, ale nie jestem pewien, czy o to prosiłeś, daj mi znać. – hakre

1

nie można po prostu dodać adres URL do listy pól? Albo szukasz funkcji do analizowania URL?

SELECT tytuł, link, data publikacji, URL od rss

Czy brakuje mi, dlaczego powyższe nie będzie działać?

+0

To po prostu nie działa, źródła RSS nie mają pola adresu URL, więc nie są zwracane. – hakre

1

Ponieważ YQL nie jest SQL i używa tylko składni SQL dla swoich zapytań, nie ma szansy na SELECT słowa kluczowego (w twoim przypadku url) użytego w klauzuli WHERE. SELECT może uzyskać dostęp tylko do pól pliku xml, podanych za pomocą słowa kluczowego url. YQL przetworzy je dla ciebie i zwróci poszukiwane pola. Powoduje to, że istnieje wiele różnych standardów rss, a nie każdy standard wymusza na kanale, aby zawierał własny adres URL, ale nie jest możliwe wybranie pola w kanale, które zwróci adres URL w każdym przypadku.

Myślę, że Twoja jedyna szansa będzie na powtórzenie tablicy $urls i wykonanie jednego zapytania na kanał. Tylko w ten sposób możesz zachować relację między adresem URL kanału a pozycjami tego kanału.

+0

, ale jak dodać pole do mojego zapytania? to nie wiem jak to zrobić ... – Alex

+0

SELECT title, link, pubDate, url FROM [...] Corubba

+0

to nie działa, nadal mam tylko 3 pola, o których wspomniałem – Alex

Powiązane problemy