Hacker News経由でArbitraryCounterというのを知った。カウントをアップまたはダウンするだけというニッチなAPIを提供するだけのもの。データは48時間しか保たないので本当に開発者向けなんだろうけど、いいね! ボタンっぽいものを作るという形で遊んだら楽しかった。
Demo: ArbitraryCounter Like Button
いいね! と違って何回でも押せるのではてなスターに近い。こういうのがちょっとした工夫でJavaScriptだけで書ける。ArbitraryCounterのAPIは非常に単純なものなので、それの使い方というよりもOpen Data Tablesを書いてYQLでPOSTする話。
カウント数の取得はGET
で可能なので、JSONPは用意されていないけどYQLでラップしてやれば良い。
select * from json where url="http://arbitrarycounter.com/vb/fruit/apples"
YQLのクエリはこんな感じ。このクエリを使ってURLを組み立て、簡単にJSONPできるjQuery.getJSON()
とかでデータを引っ張ってくるだけ。
カウントアップ(ダウン)にはPOST
が必須。素のYQLでは出来ないけど、以下の様な簡単なOpen Data Tablesを書いてやればいける。
<?xml version="1.0" encoding="UTF-8"?>
<table xmlns="http://query.yahooapis.com/v1/schema/table.xsd">
<meta>
<sampleQuery><![CDATA[
select * from {table} where url="http://arbitrarycounter.com/vb/fruit/apples+"
]]></sampleQuery>
</meta>
<bindings>
<select>
<urls>
<url>{url}</url>
</urls>
<inputs>
<key id="url" type="xs:string" required="true" paramType="variable"/>
</inputs>
<execute><![CDATA[
var data = y.rest(url).accept('*').contentType('application/x-www-form-urlencoded').post().response;
response.object = y.xparseJson(data);
]]></execute>
</select>
</bindings>
</table>
最後にy.xparseJson()
するのを忘れずに。このXMLファイルをどこかにアップロードするとYQLでPOSTを処理できるようになる。
use "http://example.com/post.xml" as post; select * from post where url="http://arbitrarycounter.com/vb/fruit/apples+"
カウントアップする時のYQLへのクエリは、先ほどのカウント取得のURLの最後にプラス(+
)を加えるだけ。成功するとカウントアップと共にカウント取得時と同じ構造のデータが返ってくる。
カウントダウンはURLの最後をハイフン(-
)に変えるだけ。
今のところも何も多分こういういいね! ボタンのような恒久的な使い方は想定していないと思うので、将来的にこれを利用したKudosとかはてなスターっぽいのがJavaScriptだけで作れる! とかそういう話ではない。ただこういうのあったらいいなとか結構前から思ってたので、とても楽しく遊べた。