Hatena::Groupnadesiko

そっとなでしこ RSSフィード


メインのブログに書くまでもない、なでしこ学習帳【記事一覧】 【このブログは何?】


特設!→【目次】なでしこ用Twitter 連携ライブラリ「なこったー」で遊ぶ


2010-09-19

「なこったー」を拡張(ミックス)してみる~「ふぁぼる」関数の再定義を例に~

| 「なこったー」を拡張(ミックス)してみる~「ふぁぼる」関数の再定義を例に~ - そっとなでしこ を含むブックマーク はてなブックマーク - 「なこったー」を拡張(ミックス)してみる~「ふぁぼる」関数の再定義を例に~ - そっとなでしこ

 日本語プログラミング言語「なでしこ」用Twitter 連携ライブラリ「なこったーは、拡張しやすく出来ています。

グループ機能を使って実装されているので、拡張性も高くなっています。

●1. 使い方 - なこったー / nakotter - 解説 - Site Untitled

http://www.undefin.net/nadesiko/xpln/lesson/L3-1

 「なでしこ」のグループ機能を使うと、オブジェクト指向風のプログラミングが出来ます。

グループを宣言するとき、他のグループをミックスすることができます。オブジェクト指向で言えば継承に当たりますが、それほど高度な機能ではなく、ただ単に、グループ内の項目をコピーしているだけです。グループ内に変数名の衝突があれば上書きしてしまいます。

グループ分け(オブジェクト指向ライク)|日本語プログラミング言語「なでしこ」

 つまり、「なこったー」ライブラリ内の「Nakotter」グループをミックスした新しいグループを定義することで、「なこったー」の機能を拡張することが出来ます。「Nakotter」をミックスしたグループの中で定義することで、オリジナルの関数を「なこったー」に追加することも出来ます。「Nakotter」をミックスしたグループの中に「なこったー」に存在するものと同じ名前の関数を定義すれば、「なこったー」の関数を上書きすることも出来ます。

 この記事では「なこったー」を拡張(ミックス)する方法のサンプルとして、「なこったー」の「ふぁぼる」関数を再定義して上書きしてみます。

■「なこったー」ver.0.32の「ふぁぼる」関数は修正が必要

 Twitterの「お気に入りに追加」を行う機能は、「なこったー」では「ふぁぼる」関数として用意されています。しかし、現在公開されている「なでしこ」ver.1.5331に同梱されている「なこったー」ver.0.32では不具合があり、「ふぁぼる」関数は動きません。

     


mametanuki
まめ狸

@_U_D_ 「なこったー」ver.0.32の「ふぁぼる」関数で「error=このメッソドはPOSTが必要です」エラーが。「URLoauth.GET」を「URLoauth.POST」に修正で動作しました~
(2010/09/01 20:43:36)

link


_U_D_
U D

@mametanuki おぉ、ありがとうございますー GET/POST は確認していたつもりでしたが、ミスってましたか。修正しておきますね!
(2010/09/03 17:22:31)

link


_U_D_
U D

. #nadesiko nakotter ver.0.33 を UP しました。内容は、テストなどの細かい修正と、「ふぁぼる」メソッドの修正のみです。
(2010/09/11 19:27:01)

link


_U_D_
U D

. #nadesiko 公式にはコミットしていません。9月中に API を大幅追加しようと思っているので、公式への反映はの時にしようと思ってます。
(2010/09/11 19:27:49)

link

いうわけで、近日中に修正される予定とのことですが、ここでは「なこったー」を拡張(ミックス)する方法のサンプルとして、不具合のある「なこったー」ver.0.32での「ふぁぼる」関数を、「なでしこ」のグループ機能を使って上書きし、修正してみたいと思います。

■「お気に入りに追加」するTwitter API「favorites/create」

 Twitter APIは、決められたURLに対してGETあるいはPOSTすることで応答が返ってくる仕組みです。

 「お気に入りに追加」するTwitter APIある「favorites/create」APIは、次のような仕様になっています。

create

指定ステータスを自分の「お気に入り」に登録する。

URL: http://api.twitter.com/1/favorites/create/id.format

(formatxml, json のうちのいずれかを指定)

引数:

id=ステータスID (必須)

「お気に入り」に登録したいステータス(発言)を指定する

例:

http://api.twitter.com/1/favorites/create/12345.json

ステータスID 12345 を「お気に入り」に登録するリクエストを発行し、実行結果を JSON 形式で取得する

http://api.twitter.com/1/favorites/create/45567.xml

ステータスID 45567 を「お気に入り」に登録するリクエストを発行し、実行結果を XML 形式で取得する

メソッド: POST

API制限: 適用対象

Twitter API 仕様書 日本語訳

http://watcher.moe-nifty.com/memo/docs/twitterAPI.txt

■「なこったー」の「ふぁぼる」関数の修正

 「なこったー」ライブラリは、「なでしこ」をインストールフォルダ配下の「lib」フィルダに格納されているなでしこファイル「nakotter.nako」で定義されています。上記の「favorites/create」APIを呼び出す「なこったー」の関数は、「nakotter.nako」では次のように記述されています。

 ・ふぁぼる({文字列}STATUS_IDを)~
  URLとは文字列 = APIURL & 『favorites/create/』 & STATUS_ID & フォーマット
  URLへoauth.GET
  レスポンス処理。

 「ふぁぼる」関数で行われる処理をざっくりと読んでみます。

 変数「APIURL」の値は「http://api.twitter.com/1/」。変数「フォーマット」の値は「.json」。これに「ふぁぼる」関数引数として渡される、お気に入り登録の対象となるツイートのステータスIDを文字列結合してURL文字列作成しています。して、このURLに対して、OAuth認証でHTTPのGETリクエストを送っています。

 上記のTwitter API 仕様書を見ると、HTTPリクエストはPOSTではなくGETを使うように指定されています。ですので、「ふぁぼる」関数を次のように修正する必要あります

 ・ふぁぼる({文字列}STATUS_IDを)~
  URLとは文字列 = APIURL & 『favorites/create/』 & STATUS_ID & フォーマット
  URLへoauth.POST # 「oauth.GET」を「oauth.POST」に修正
  レスポンス処理。

■「なこったー」を拡張(ミックス)して、修正した「ふぁぼる」関数で上書き

 この修正を、「nakotter.nako」を直接編集せずに反映させる方法がありますそれが、「なこったー」を拡張(ミックス)して、修正した「ふぁぼる」関数で上書きするという方法です。

 「なこったー」の関数は、「なこったー」ライブラリ内の「Nakotter」というグループの中で定義されています。この「Nakotter」グループをミックスしたグループを、自分で書くなでしこスクリプトの中で定義します。して、の中で修正した「ふぁぼる」関数を定義します。こうすることで、修正した「ふぁぼる」関数で上書きすることが出来ます。

 例えば、以下のツイート(http://twitter.com/nadesiko/status/23146777509)、つまりステータスID「23146777509」をお気に入り登録するサンプルを書いてみます。

  


nadesiko
nadesiko

なでしこがバージョンアップしたようです → 2010/09/06 version 1.5331 http://nadesi.com/
(2010/09/06 22:59:06)

link

※「OAuth認証設定」部分を、事前に取得した「コンシューマ・キー」と「コンシューマ・シークレット」、「アクセストークン」と「アクセストークンシークレット」に書き換えて実行して下さい。

#-----------------------------------------------------------------------
# OAuth認証設定
#-----------------------------------------------------------------------
# Twitterにアプリケーション登録した際に発行された
# 「コンシューマ・キー」と「コンシューマ・シークレット」を設定
CONSUMER_KEY=「****」。
CONSUMER_SECRET=「****」。
# 「アプリケーションのアクセス許可」&認証で発行された
# 「アクセストークン」と「アクセストークンシークレット」を設定
OAUTH_TOKEN=「****」。
OAUTH_TOKEN_SECRET=「****」。
#-----------------------------------------------------------------------
!「nakotter.nako」を取り込む

#-----------------------------------------------------------------------
# NakotterグループをミックスしたMyNakotterグループの定義
#-----------------------------------------------------------------------
■MyNakotterとは +Nakotter
 ・ふぁぼる({文字列}STATUS_IDを)~
  URLとは文字列 = APIURL & 『favorites/create/』 & STATUS_ID & フォーマット
  URLへoauth.POST # 「oauth.GET」を「oauth.POST」に修正
  レスポンス処理。

なこったークライアントとはMyNakotter。
そのoauthのコンシューマのトークンキー = CONSUMER_KEY。
そのoauthのコンシューマのシークレット = CONSUMER_SECRET。
そのoauthのトークンキー = OAUTH_TOKEN。
そのoauthのシークレット = OAUTH_TOKEN_SECRET。

なこったークライアントから「23146777509」をふぁぼる。
それをメモ記入。

■お気に入りを外すオリジナル関数も簡単に追加可能

 この要領で、「なこったー」ライブラリには無い新しい関数追加することも簡単にできます。

 例えば、お気に入りを外すTwitter APIある「favorites/destroy」APIを呼ぶ関数は次のように書くことができます。

 ・ふぁぼり削除({文字列}STATUS_IDを)~
  URLとは文字列 = APIURL & 『favorites/destroy/』 & STATUS_ID & フォーマット
  URLへoauth.POST
  レスポンス処理。

 「ふぁぼる」関数を参考に、URL文字列作成する個所を少し変更しただけです。簡単ですね。

 つまり、Twitter API仕様書を読み、

  • リクエスト先のURLは何か
  • HTTPリクエストはPOSTかGETか

この2点さえ把握できれば、「なこったー」にオリジナルの関数追加してカスタマイズすることは比較的に容易です。「なこったー」は非常に拡張し易く作られたライブラリーなのです。