Benutzer-Werkzeuge

Webseiten-Werkzeuge


webdev:api:yahoo:yql

YQL

Die Yahoo! Query Language ist eine SQL ähnliche Sprache, mit der man Webdienste (Web-API) abfragen, filtern oder sogar verschiedene Quellen zusammenführen kann. Es existieren auch eine grosse Menge von Open Data Tables die teilweise sogar ohne API-Key abgefragt werden können. YQL ist Teil des Yahoo! Developer Networks.

YQL public query

URL

http://query.yahooapis.com/v1/public/yql?q=youryqlquery&format=json

Argumente

q Query Statementrequiered
formatjson,xml-
callbackjson callback methode-
diagnosticsinformationen-
debugdebug infos (network call,etc)-
envyql enviroment file-

Limits

max items5000
max execution time30 sec
default items10

Beispiele

Feed empfangen

Externer Feed mit YQL abfragen (2 Einträge)

Statement:

SELECT * FROM feed WHERE url='http://www.heise.de/newsticker/heise-atom.xml' LIMIT 2

Ausgabe (XML):

<?xml version="1.0" encoding="UTF-8"?>
<query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" yahoo:count="2" yahoo:created="2010-06-18T04:49:24Z" yahoo:lang="en-US">
    <diagnostics>
        <publiclyCallable>true</publiclyCallable>
        <url execution-time="5" proxy="DEFAULT"><![CDATA[http://datatables.org/alltables.env]]></url>
        <url execution-time="532" proxy="DEFAULT"><![CDATA[http://www.heise.de/newsticker/heise-atom.xml]]></url>
        <user-time>550</user-time>
        <service-time>537</service-time>
        <build-version>8367</build-version>
    </diagnostics> 
    <results>
        <entry xmlns="http://www.w3.org/2005/Atom">
            <title>185.000 Unterschriften gegen Waffen und Killerspiele</title>
            <link href="http://www.heise.de/newsticker/meldung/185-000-Unterschriften-gegen-Waffen-und-Killerspiele-1025673.html/from/atom10"/>
            <id>http://www.heise.de/newsticker/meldung/185-000-Unterschriften-gegen-Waffen-und-Killerspiele-1025673.html/from/atom10</id>
            <updated>2010-06-18T17:47:00+02:00</updated>
        </entry>
        <entry xmlns="http://www.w3.org/2005/Atom">
            <title>Leistungsschutzrecht soll "Snippets" erfassen</title>
            <link href="http://www.heise.de/newsticker/meldung/Leistungsschutzrecht-soll-Snippets-erfassen-1025613.html/from/atom10"/>
            <id>http://www.heise.de/newsticker/meldung/Leistungsschutzrecht-soll-Snippets-erfassen-1025613.html/from/atom10</id>
            <updated>2010-06-18T16:35:00+02:00</updated>
        </entry>
    </results>
</query>

yql-Console

Open Data Tables

Beispiel mit einer Query über die Yahoo Music API Statement:

SELECT * FROM music.artist.id WHERE ids="289282"
http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20music.artist.id%20where%20ids%3D%22289282%22&format=json

Ausgabe (JSON)

cbfunc({
 "query": {
  "count": "1",
  "created": "2010-06-18T04:51:05Z",
  "lang": "en-US",
  "results": {
   "Artist": {
    "catzillaID": "1927328046",
    "flags": "59075",
    "hotzillaID": "1800328228",
    "id": "289282",
    "name": "Britney Spears",
    "rating": "-1",
    "trackCount": "1280",
    "url": "http://new.music.yahoo.com/britney-spears/",
    "website": "http://www.britneyspears.com"
   }
  }
 }
});

Multiple Feeds und sortieren

Man kann mit yql auch verschiedene webdienste abfragen:

SELECT title,link,pubDate FROM rss
    WHERE url IN (
        'http://feeds.feedburner.com/vakantpodcast',
        'http://feeds.feedburner.com/FutureMusicPodcast'
    ) 

Ergebnis (XML)

<?xml version="1.0" encoding="UTF-8"?>
<query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" yahoo:count="4" yahoo:created="2010-06-22T08:04:14Z" yahoo:lang="en-US">
    <diagnostics>
        <publiclyCallable>true</publiclyCallable>
        <url execution-time="138" proxy="DEFAULT"><![CDATA[http://feeds.feedburner.com/FutureMusicPodcast]]></url>
        <url execution-time="139" proxy="DEFAULT"><![CDATA[http://feeds.feedburner.com/vakantpodcast]]></url>
        <user-time>142</user-time>
        <service-time>277</service-time>
        <build-version>8367</build-version>
    </diagnostics> 
    <results>
        <item>
            <title>VA Podcast 03 &ndash; Nico Purman&rsquo;s Interstellar Discotheque</title>
            <link>http://feedproxy.google.com/~r/VakantPodcast/~3/fL_13dWLx3g/</link>
            <pubDate>Fri, 11 Jun 2010 11:13:47 +0000</pubDate>
        </item>
        <item>
            <title>VA Podcast 02 &ndash; DeWalta&rsquo;s Family Gang Mix</title>
            <link>http://feedproxy.google.com/~r/VakantPodcast/~3/wA5ZRAFiSSI/</link>
            <pubDate>Fri, 11 Jun 2010 11:07:46 +0000</pubDate>
        </item>
        <item>
            <title>VA Podcast 01 &ndash; Robag Wruhme&rsquo;s B&ouml;rneb&ouml;ll Mikks</title>
            <link>http://feedproxy.google.com/~r/VakantPodcast/~3/LavjamLkICQ/</link>
            <pubDate>Fri, 11 Jun 2010 11:06:26 +0000</pubDate>
        </item>
        <item>
            <pubDate>Sat, 22 May 2010 10:03:00 +0000</pubDate>
            <title>Future Music Podcast 001 - Sheffield Bleep</title>
            <link>http://feedproxy.google.com/~r/FutureMusicPodcast/~3/SrvQixllMtA/future-music-podcast-001-sheffield.html</link>
        </item>
    </results>
</query>

yql-Console

Yahoo spendiert Funktionen, mit denen die Ergebnisse sortiert werden können:

SELECT title,link,pubDate FROM rss
    WHERE url IN (
        'http://feeds.feedburner.com/vakantpodcast',
        'http://feeds.feedburner.com/FutureMusicPodcast'
    ) | sort(FIELD='pubDate',descending='true')
 

In diesem Fall werden die Feeds aufsteigend (descending=true) nach Datum sortiert (field='pubDate')

Ergebnis:

<?xml version="1.0" encoding="UTF-8"?>
<query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" yahoo:count="5" yahoo:created="2010-06-23T07:09:33Z" yahoo:lang="en-US">
    <diagnostics>
        <publiclyCallable>true</publiclyCallable>
        <url execution-time="1971" proxy="DEFAULT"><![CDATA[http://datatables.org/alltables.env]]></url>
        <url execution-time="134" proxy="DEFAULT"><![CDATA[http://feeds.feedburner.com/FutureMusicPodcast]]></url>
        <url execution-time="167" proxy="DEFAULT"><![CDATA[http://feeds.feedburner.com/vakantpodcast]]></url>
        <user-time>2156</user-time>
        <service-time>2272</service-time>
        <build-version>8367</build-version>
    </diagnostics> 
    <results>
        <item>
            <pubDate>Tue, 22 Jun 2010 12:16:00 +0000</pubDate>
            <title>Future Music Podcast 002 - Cristiano</title>
            <link>http://feedproxy.google.com/~r/FutureMusicPodcast/~3/f6z_wD-Pb0Y/future-music-podcast-002-cristiano.html</link>
        </item>
        <item>
            <title>VA Podcast 03 &ndash; Nico Purman&rsquo;s Interstellar Discotheque</title>
            <link>http://feedproxy.google.com/~r/VakantPodcast/~3/fL_13dWLx3g/</link>
            <pubDate>Fri, 11 Jun 2010 11:13:47 +0000</pubDate>
        </item>
        <item>
            <title>VA Podcast 02 &ndash; DeWalta&rsquo;s Family Gang Mix</title>
            <link>http://feedproxy.google.com/~r/VakantPodcast/~3/wA5ZRAFiSSI/</link>
            <pubDate>Fri, 11 Jun 2010 11:07:46 +0000</pubDate>
        </item>
        <item>
            <title>VA Podcast 01 &ndash; Robag Wruhme&rsquo;s B&ouml;rneb&ouml;ll Mikks</title>
            <link>http://feedproxy.google.com/~r/VakantPodcast/~3/LavjamLkICQ/</link>
            <pubDate>Fri, 11 Jun 2010 11:06:26 +0000</pubDate>
        </item>
        <item>
            <pubDate>Sat, 22 May 2010 10:03:00 +0000</pubDate>
            <title>Future Music Podcast 001 - Sheffield Bleep</title>
            <link>http://feedproxy.google.com/~r/FutureMusicPodcast/~3/SrvQixllMtA/future-music-podcast-001-sheffield.html</link>
        </item>
    </results>
</query>

yql-Console

Paging/LIMIT (remote und local)

Wie auch an SQL angelehnt, kann YQL die Rückgabemenge entweder lokal oder remote beeinflussen. Wenn man zb eine Pagingfunktion basteln möchte, ist man hier richtig:

Remote

maximal 10 Zeilen vom Remote-Host

SELECT * FROM rss(10) WHERE url='http://example.com/rss.xml'

Es kann auch ein Offset angegeben werden, ab wann die Ausgabe startet:

SELECT * FROM rss(10,20) WHERE url='http://example.com/rss.xml'

Local

Maximal 10 Items

SELECT * FROM rss WHERE url='http://example.com/rss.xml' LIMIT 10

Mit Offset:

SELECT * FROM rss WHERE url='http://example.com/rss.xml' LIMIT 10 OFFSET 20

Kombiniert

SELECT * FROM rss(100) WHERE url='http://example.com/rss.xml' LIMIT 10 OFFSET 0

Helper

In diesem Wiki finden sich zwei „Helper“,womit man YQL mit PHP oder Javascript abfragen kann

~~DISCUSSION~~

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
webdev/api/yahoo/yql.txt · Zuletzt geändert: 2012/07/10 07:37 (Externe Bearbeitung)

hello, world