{"id":58,"date":"2010-07-02T13:56:45","date_gmt":"2010-07-02T20:56:45","guid":{"rendered":"https:\/\/www.zacwitte.com\/?p=58"},"modified":"2010-07-02T13:56:45","modified_gmt":"2010-07-02T20:56:45","slug":"the-yahoo-firehose-feed-isnt-a-feed-at-all","status":"publish","type":"post","link":"https:\/\/zacwitte.com\/?p=58","title":{"rendered":"The Yahoo Firehose &quot;feed&quot; isn&#8217;t a feed at all"},"content":{"rendered":"<p>The web has been on a big trend of real-time for the past couple years. Friendfeed was one of the first services to show real-time updates across your social network and real-time feeds took the stage in a big way when Twitter started its <a href=\"http:\/\/developer.twitter.com\/pages\/streaming_api\" target=\"_blank\" rel=\"noopener\">streaming API<\/a>. In April, <a href=\"http:\/\/developer.yahoo.net\/blog\/archives\/2010\/04\/yahoo_updates_firehose.html\" target=\"_blank\" rel=\"noopener\">Yahoo! announced it&#8217;s Firehose API<\/a> claiming &#8220;it includes a real-time feed of every public action taken on our network&#8221;. The thing is, this isn&#8217;t a &#8220;feed&#8221; or a &#8220;stream&#8221; in the same sense that Twitter&#8217;s streaming API is. It&#8217;s a database you can poll with Yahoo&#8217;s YQL, an SQL like query language. Sure, the updates may be available in their database in near real-time, but to receive them you need to issue a new request. In fact the only way you know if there are updates is to continuously poll the service. A feed would be something like long-polling with <a href=\"http:\/\/en.wikipedia.org\/wiki\/Push_technology#HTTP_server_push\" target=\"_blank\" rel=\"noopener\">HTTP server push<\/a> (what twitter does) or <a href=\"http:\/\/code.google.com\/p\/pubsubhubbub\/\" target=\"_blank\" rel=\"noopener\">PubSubHubbub<\/a>.<\/p>\n<p>It may be just semantics to some, but this bothers me. To those of us who build applications that publish or consumer real-time information this is a very important distinction. I plan on writing a python library that wraps flickr&#8217;s polling API into a &#8220;real-time&#8221; blocking continuous stream for a project I&#8217;m working on. I&#8217;ll publish the code on github and post it here when done.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The web has been on a big trend of real-time for the past couple years. Friendfeed was one of the first services to show real-time updates across your social network and real-time feeds took the stage in a big way when Twitter started its streaming API. In April, Yahoo! announced it&#8217;s Firehose API claiming &#8220;it [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[11,20,21,22,31,32],"class_list":["post-58","post","type-post","status-publish","format-standard","hentry","category-tech","tag-feed","tag-python","tag-real-time","tag-stream","tag-yahoo","tag-yql"],"_links":{"self":[{"href":"https:\/\/zacwitte.com\/index.php?rest_route=\/wp\/v2\/posts\/58","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zacwitte.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zacwitte.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zacwitte.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zacwitte.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=58"}],"version-history":[{"count":0,"href":"https:\/\/zacwitte.com\/index.php?rest_route=\/wp\/v2\/posts\/58\/revisions"}],"wp:attachment":[{"href":"https:\/\/zacwitte.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=58"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zacwitte.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=58"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zacwitte.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=58"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}