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だけで作れる! とかそういう話ではない。ただこういうのあったらいいなとか結構前から思ってたので、とても楽しく遊べた。