Hatena::Groupnadesiko

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


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


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


2011-05-22

「なこったー」でブロックする

| 「なこったー」でブロックする - そっとなでしこ を含むブックマーク はてなブックマーク - 「なこったー」でブロックする - そっとなでしこ

 日本語プログラミング言語「なでしこ」用Twitter 連携ライブラリ「なこったーの「ブロック」関数を使用し、Twitter APIの「blocks/create」 APIを呼んでみるサンプルです。

関数】ブロック({文字列}SCREEN_NAMEを)~

 使用する関数は、「ブロック」関数です。

■説明

 Twitter APIの「blocks/create」 APIを「なでしこ」から呼び、指定したユーザーをブロックする関数です。

 「blocks/create」 APIについては以下の通りです。

指定ユーザをブロックする。指定ユーザが friend だった場合、friend から外した上でブロックする

id, user_id, screen_name のいずれかの引数を必ず指定すること

Twitter API 仕様書 日本語訳

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

引数

詳細は、「Twitter API 仕様書 日本語訳」等を参照のこと。


■戻り値

Twitter APIへの問い合わせに成功した場合に取得した値は、ハッシュテーブルの配列に格納されて戻ります。

詳細は、以下を参照。

作成したサンプルについて

 機能はこんな感じ。

  • 指定したユーザー(ユーザー名「mametanuki」)をブロックする
  • ブロックした結果としてTwitter APIが返す、ブロックしたユーザー(ユーザー名「mametanuki」)の情報(user要素)をメモ表示する

■ソースコード

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

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

!「nakotter.nako」を取り込む
なこったークライアントとはNakotter。
そのoauthのコンシューマのトークンキー = CONSUMER_KEY。
そのoauthのコンシューマのシークレット = CONSUMER_SECRET。
そのoauthのトークンキー = OAUTH_TOKEN。
そのoauthのシークレット = OAUTH_TOKEN_SECRET。

なこったークライアントから「mametanuki」をブロックしてメモ記入。


【関連記事】自分がブロックしているユーザーを確認するには


2011-05-20

「なこったー」で自分がブロックしているユーザーの一覧を取得する

| 「なこったー」で自分がブロックしているユーザーの一覧を取得する - そっとなでしこ を含むブックマーク はてなブックマーク - 「なこったー」で自分がブロックしているユーザーの一覧を取得する - そっとなでしこ

 日本語プログラミング言語「なでしこ」用Twitter 連携ライブラリ「なこったーの「ブロックユーザ一覧取得」関数を使用し、Twitter APIの「statuses/user_timeline」 APIを呼んでみるサンプルです。

関数】ブロックユーザ一覧取得({ハッシュ=?}PARAMで)~

 使用する関数は、「ブロックユーザ一覧取得」関数です。

■説明

 Twitter APIの「blocks/blocking」 APIを「なでしこ」から呼び、自分がブロックしているユーザの一覧を取得する関数です。

 「blocks/blocking」 APIについては以下の通りです。

自分がブロックしているユーザの一覧を取得する

Twitter API 仕様書 日本語訳

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

引数

詳細は、「Twitter API 仕様書 日本語訳」等を参照のこと。

  • {ハッシュ=?}PARAMで
    • 省略可能です。のサンプルでは使用していません。
    • ハッシュ形式で以下の項目を指定できます(例:パラムとはハッシュ。#パラム@「count」=200。)
      • page=ページ番号
        • (1ページを20件とみなしたときの)ページ番号を指定することで、過去の任意の言及を20件単位で取得
■戻り値

Twitter APIへの問い合わせに成功した場合に取得した値は、ハッシュテーブルの配列に格納されて戻ります。

詳細は、以下を参照。

作成したサンプルについて

 機能はこんな感じ。

  • 自分がブロックしているユーザの一覧を取得し、ユーザーのプロファイル(ユーザー名、名前、自己紹介)グリッド表示
  • 任意の行をダブルクリックすると、の行のユーザーのプロフィールを標準ブラウザで表示
  • グリッド表示の仕様の関係で、ユーザーの「自己紹介」文字列は…
    • 改行は「 」(全角白文字)に置換(改行文字以下が次の行に表示されるのを防ぐため)
    • 「,」は「、」に置換(「,」以下が次の列に表示されるのを防ぐため)

■ソースコード

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

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


!「nakotter.nako」を取り込む
なこったークライアントとはNakotter。
そのoauthのコンシューマのトークンキー = CONSUMER_KEY。
そのoauthのコンシューマのシークレット = CONSUMER_SECRET。
そのoauthのトークンキー = OAUTH_TOKEN。
そのoauthのシークレット = OAUTH_TOKEN_SECRET。

ユーザーグリッドとはグリッド。
ユーザーグリッドについて
 レイアウトは「全体」

ユーザーリスト=「ユーザー名,ユーザ名称,紹介文」。

ブロックリスト=なこったークライアントからブロックユーザ一覧取得
ブロックリストを反復
 紹介文は、対象@`description`を出力変換処理。
 ユーザーリストは、「{ユーザーリスト}{~}{対象@`screen_name`},」&
 「{対象@`name`},{紹介文}」

ユーザーグリッドのアイテムはユーザーリスト。
そのダブルクリックした時は~
 それはユーザーグリッドのテキスト。
 ツイートURL=「http://twitter.com/{それ\0,0}」。
 ツイートURLを起動。#ブラウザが起動

●出力変換処理(対象文字列を)
 対象文字列は、対象文字列の「(\r\n)」を「 」へ正規表現置換。
 対象文字列は、対象文字列の「,」を「、」へ正規表現置換。
 #対象文字列をメモ記入。
 対象文字列で戻る。



【関連リンク】

 ちなみに、自分がブロックしているユーザーの一覧を取得できるサービスとしては、代表的なものに以下あります

2010-09-24

コマンド入力型ランチャー「fenrir」×「なこったー」で高速ツイート!

| コマンド入力型ランチャー「fenrir」×「なこったー」で高速ツイート! - そっとなでしこ を含むブックマーク はてなブックマーク - コマンド入力型ランチャー「fenrir」×「なこったー」で高速ツイート! - そっとなでしこ

 コマンド入力型ランチャー「fenrir」のインスタントコマンドからのサクッとTwitterに投稿できるようにする「なでしこ」スクリプトを、Twitter連携ライブラリ「なこったーを使って書いてみました。我ながら、これは快適かも!

 元ネタは、こちらの記事。

 ここで紹介されていたのは、「fenrir」からmala氏が書いたRubyスクリプトを呼び出す、というアイデアでした。

 これに対しての記事では、「fenrir」から呼び出すスクリプトを、OAuth認証に対応した日本語プログラミング言語「なでしこ」で書いてみよう、ということです。

■コマンド入力型ランチャー「fenrir」

 個人的には、昨年FenrirFSのおかげでGoogle先生により引き合わせていただいたランチャー「fenrir」。

 ランチャーなのに、ランチャーから起動するアプリケーションを登録しないで使えるというのが「fenrir」の売りです。ですが、起動するアプリケーションを登録して任意のコマンドで呼び出すことも可能です。それが「インスタントコマンド」機能です。

 この「インスタントコマンド」を利用して、

/t こんにちわ!

と、「fenrir」からコマンドを入力すると、「こんにちわ!」というツイートがTwitterに投稿できるようにしてみよう!ということです。

■「fenrir」から起動する「なでしこ」バッチスクリプトのソースコード

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

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

!「nakotter.nako」を取り込む
なこったークライアントとはNakotter。
そのoauthのコンシューマのトークンキー = CONSUMER_KEY。
そのoauthのコンシューマのシークレット = CONSUMER_SECRET。
そのoauthのトークンキー = OAUTH_TOKEN。
そのoauthのシークレット = OAUTH_TOKEN_SECRET。

もし、コマンドライン¥1が「-debug::*」にワイルドカード一致ならば
 「投稿するメッセージが入力されていません」と言う。
違えば
 引数テキストは、コマンドライン¥1の「^'」を「」へ正規表現置換。
 引数テキストは、引数テキストの「'$」を「」へ正規表現置換。 
 なこったークライアントから「{引数テキスト}」とつぶやく。
 応答テキストは、それ。
 投稿テキストは、応答テキスト@"text"。
 もし、投稿テキストが空でないならば
  「『{投稿テキスト}』{~}を投稿しました」と言う。
 違えば
  「ツイートに失敗しました{~}{応答テキスト}」と言う。
 ここまで。
ここまで。
終わる。

■「fenrir」の設定

 まず、上記の「なでしこ」スクリプトを、なでしこエディタの「ファイル」>「バッチファイル作成」から「*.bat」ファイルとして保存します。「*.nako」ファイルだと、引数付きでスクリプトを起動できないので。

 例として、以下の場所に保存したとします。

D:\data\スクリプト\なでしこ\ツイート.bat

 この場合、「fenrir」のインスタントコマンドの設定ファイルである「instant.ini」(無い場合は、「fenrir」インストール先の「data」フォルダー内に作成します)に次のように設定します。

[InstantCommand]
/t=""D:\data\スクリプト\なでしこ\ツイート.bat"" '"%A"'
/tc=""D:\data\スクリプト\なでしこ\ツイート.bat"" '"%C"'

 このように設定することで、「/t こんにちわ」とコマンド入力すると「こんにちわ」というツイートが投稿されます。また、「/tc」とコマンド入力すると、クリップボード内にコピーされている文字列がツイートとして投稿されます。ただし、クリップボードに格納されている文字列改行文字を含む場合は、改行文字以下が切れて投稿されます。

 「instant.ini」への設定のポイントは、「'"%A"'」や「'"%C"'」のように、「なでしこ」バッチスクリプトに渡す引数を「'"」で囲っている点です。なぜんな妙な書き方をしているかと言うと、まず、引数で渡される文字列の中に白文字を含む場合に白文字以下が切れてしまう問題に対処するために「"」で囲っています。さらに、コマンドライン両端のダブルクォーテーションを自動で外す機能を持つ「fenrir」の仕様の関係で、さらに「'」で囲っています。

 このため、上記の「なでしこ」スクリプトでは、コマンドライン引数で渡された文字列の文頭と文末にある「'」を正規表現を使って外す処理が書かれています。

■複数のTwitterアカウントを頻繁に切り替えて使う人は…

 上記の「なでしこ」スクリプトでは、投稿するTwitterアカウントが一つに固定されてしまいます。複数のTwitterアカウントを頻繁に切り替えて使いたいという人の場合は、拙作の「なこったー」簡易認証ツールを利用して、Twitterアカウント情報をINIファイルから読み込む形にすれば良いと思います。

 の場合の「なでしこ」バッチスクリプトのソースコードは、こんな感じになります。読み込むINIファイルの場所は、各自の環境に合わせて書き換えて使用して下さい。

INIファイル=「d:\data2\nakotter.ini」。

!「nakotter.nako」を取り込む。
なこったークライアントとはNakotter。

INIファイルのINI開いて、ハンドルに代入。
そのoauthのコンシューマのトークンキー = ハンドルで「OAuth」の「consumer_key」をINI読む。
そのoauthのコンシューマのシークレット = ハンドルで「OAuth」の「consumer_secret」をINI読む。
そのoauthのトークンキー = ハンドルで「OAuth」の「oauth_token」をINI読む。
そのoauthのシークレット = ハンドルで「OAuth」の「oauth_token_secret」をINI読む。
スクリーン名=ハンドルで「OAuth」の「screen_name」をINI読む。
ハンドルのINI閉じる。

もし、コマンドライン¥1が「-debug::*」にワイルドカード一致ならば
 「投稿するメッセージが入力されていません」と言う。
違えば
 引数テキストは、コマンドライン¥1の「^'」を「」へ正規表現置換。
 引数テキストは、引数テキストの「'$」を「」へ正規表現置換。 
 なこったークライアントから「{引数テキスト}」とつぶやく。
 応答テキストは、それ。
 ステータスIDは、応答テキスト@"id"。
 投稿テキストは、応答テキスト@"text"。
 もし、投稿テキストが空でないならば
  「『{投稿テキスト}』{~}を投稿しました」と言う。
  #「http://twitter.com/{スクリーン名}/status/{ステータスID}」を起動。#←確認用
 違えば
  「ツイートに失敗しました{~}{応答テキスト}」と言う。
 ここまで。
ここまで。
終わる。



2010-09-22

「なこったー」にあると便利そうな関数リスト

| 「なこったー」にあると便利そうな関数リスト - そっとなでしこ を含むブックマーク はてなブックマーク - 「なこったー」にあると便利そうな関数リスト - そっとなでしこ

 Twitter APIの中で、日本語プログラミング言語「なでしこ」用Twitter 連携ライブラリ「なこったーで使えるものは、まだ一部に限られています。

  


_U_D_
U D

. #nadesiko なこったーに追加して欲しい API 募集。宣言したし追加作業する。
(2010/09/21 12:14:49)

link

 ということで、こんなAPIがあったら便利そうだな~、というものを、Twitter API 仕様書からリストアップしてみました。

 「なでしこ」でTwitter関連ツールを作る場合、汎用的なTwitterクラインアントとかよりも、「Twitterボット」「リストへの一括登録ツール」「相互フォローツール」「片思い一括リムーブツール」「一括ブロックツール」みたいな、痒い所に手が届く系の小物ツールに需要があるのでは、と思います。ですから、そういうTwitter関連ツールを作る場合に必要になりそうAPIを選んでみました。

■タイムライン関連のAPI

■statuses/retweeted_by_me(欲しい度★)

 自分が投稿した retweet の一覧を取得する。

 意外と既存のTwitterクラインアントでは閲覧できなかったりするので、需要があるかも?

■statuses/retweets_of_me(欲しい度★★★)

 自分が投稿した発言のうち(自分以外の)誰かによって retweet されたものの一覧を取得する。

 Twitterクラインアントでも、返信一覧は閲覧できても、retweetの一覧は閲覧できないものも少なくないので、需要はあるかと。というか、自分は欲しかったので、既に「なこったー」を拡張して使っていたりしますw

 こんな感じ。

 ・リツイート取得({ハッシュ=?}PARAMで)~
  URLとは文字列 = APIURL & 『statuses/retweets_of_me』 & フォーマット
  URLへPARAMでoauth.GET
  レスポンス処理。

 具体的に誰がリツイートしたのかを知るためには、「statuses/id/retweeted_by」APIを使う必要あるようです。

■ステータス関連のAPI

■statuses/show(欲しい度★★)

 指定した ID のステータス(1件)を取得する。

 地味なAPIです。使う場面があるとすれば、「ホームTL取得」「ユーザTL取得」「返信取得」で取得したツイート情報(status要素)に含まれる「in_reply_to_status_id」値から返信先のツイートを取得したい、みたいな場面で必要になるかと。

 あるこ便利なので(Twitter APIの動作確認みたいな時)、既に「なこったー」を拡張して使っていたりしますw

 こんな感じ。

 ・つぶやき取得({文字列}STATUS_IDを)~
  URLとは文字列 = APIURL & 『statuses/show/』 & STATUS_ID & フォーマット
  URLへoauth.GET
  レスポンス処理。

■statuses/id/retweeted_by(欲しい度★★★)

 指定したステータスを retweet しているユーザのうち最大100人分のユーザ情報を取得する(page引数を指定することで101人目以降も取得可能)。

 似たようなAPIは他にもあります。ただ、「statuses/retweets」だと最新の100人分しか取得できません。「statuses/id/retweeted_by/ids」だとユーザーID番号しか取得できません。仕様書を見た限りでは、「statuses/id/retweeted_by」が使い勝手が良さそうかと。

 上記の「statuses/retweets_of_me」とセットで使うことになるかと。

■ユーザ情報関連のAPI

■statuses/friends(欲しい度★★★)

 自分がフォローしているユーザーの一覧を(各 friend の最新ステータス付きで)取得する。

■statuses/followers(欲しい度★★★)

 自分をフォローしているユーザーの一覧を(各 follower の最新ステータス付きで)取得する。


■users/lookup(欲しい度★★★)

 ユーザIDまたはスクリーン名で指定したユーザに関する詳細な情報を取得する

 似たようなAPIとして「users/show」がありますが、「users/show」は指定ユーザが自分の friend でない場合はエラーになります。

■users/search(欲しい度★★)

 指定条件に一致する Twitter ユーザを検索する。


■ダイレクトメッセージ関連のAPI

 自分はTwitterでDMを使ったことが無いので、個人的にはあんまり欲しくは…w

■direct_messages(欲しい度★)

 自分宛てのダイレクトメッセージの一覧を取得する (最大20件)

■direct_messages/sent(欲しい度★)

 自分が送信したダイレクトメッセージの一覧を取得する (最大20件)

■direct_messages/new(欲しい度★)

 ダイレクトメッセージを送信

■direct_messages/destroy(欲しい度★)

 ダイレクトメッセージを削除

■フレンド関連のAPI

■friendships/destroy(欲しい度★★★)

 指定ユーザーをフォローから外す。

■お気に入り関連のAPI

■favorites(欲しい度★★★)

 自分または指定したユーザの favorites(お気に入り) に登録されている「発言」のうち、最新のものから最大20件取得する

■favorites/destroy(欲しい度★★★)

 指定ステータスを自分の「お気に入り」から外す。

■ブロック関連のAPI

■blocks/create(欲しい度★★★)

 指定ユーザをブロックする。

 あると便利なので、既に「なこったー」を拡張して使っていたりしますw

 こんな感じ。

 ・ブロック({ハッシュ=?}PARAMで{文字列}SCREEN_NAMEを)~
  URLとは文字列 = APIURL & 『blocks/create/』 & SCREEN_NAME & フォーマット
  URLへPARAMでoauth.POST
  レスポンス処理。

■blocks/destroy(欲しい度★★★)

 指定ユーザのブロックを解除する。

■blocks/blocking(欲しい度★★★)

 自分がブロックしているユーザの一覧を取得する。

 何気に、自分がブロックしているユーザを確認する方法がtwitter.comには用意されていません。あると便利なので、既に「なこったー」を拡張して使っていたりしますw

 こんな感じ。

 ・ブロック一覧取得~
  URLとは文字列 = APIURL & 『blocks/blocking』 & フォーマット
  URLへoauth.GET
  レスポンス処理。

■list 関連のAPI

■POST lists (create)(欲しい度★★★)

 list を作成する

■GET lists (index)(欲しい度★★★)

 指定ユーザの list の一覧を取得する(自分自身の list の一覧を取得する場合は、非公開の list も一覧に含まれる)。

■GET list statuses

 指定した list に登録されているメンバーのみで構成されるタイムラインを取得(欲しい度★★★)

■GET list memberships(欲しい度★)

 指定したユーザが登録されている list の一覧を取得する

 「http://twitter.com/××/lists/memberships」を見ればいいじゃん、という話も…

■GET list subscriptions(欲しい度★)

 指定したユーザが購読している list の一覧を取得する

 「http://twitter.com/××/lists」を見ればいいじゃん、という話も…

■list の登録内容に関する API

■GET list members(欲しい度★★★)

 指定した list に登録されているメンバーの一覧を取得する。

 便利そうリストを発見して、リストのまま購読するのではなく、自分用にカスタマイズしたい時とか、あると便利そうかなぁと。

■POST list members(欲しい度★★★)

 指定した list にメンバー追加する。

 上記の「GET list members」で取得したメンバー一覧を編集したリストを一括登録する時、などに使えそうかと。

■DELETE list members(欲しい度★★★)

 指定した list からメンバーを削除する。

■検索関連のAPI

■search(欲しい度★★)

 指定した検索条件を満たす「発言」を返す。


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