Hatena::Groupnadesiko

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


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


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


2010-09-12

「なこったー」簡易認証ツール

| 「なこったー」簡易認証ツール - そっとなでしこ を含むブックマーク はてなブックマーク - 「なこったー」簡易認証ツール - そっとなでしこ

 mrさんが、日本語プログラミング言語「なでしこ」用Twitter 連携ライブラリ「なこったーでの認証を簡単に行うツールを作りました。

 非常に便利なツールなので、少し手を加えてみました。

変更点は、

  • (1)ライブラリ変更→Nakotterグループを拡張したMyNakotterグループを定義
    • ※「なこったー」は、「なでしこ」が持っているオブジェクト指向ライクな「グループ」機能を使ってミックス(オブジェクト指向の"継承"に相当)して、比較的簡単に拡張できて、非常に便利!
  • (2)認証で取得したOAuth認証情報をINIファイルに保存

の2点です。

 これまで「なこったー」を使っていて複数のtwitterアカウントを切替える場合に、自分は毎スクリプトのソースコードを書き換えていました。これが実に地味に面倒臭いw。しかし、このツールを使えば、twitterアカウントの切替が簡単にできるようになります。

■「なこったー」簡易認証ツールの機能

 「なこったー」簡易認証ツールの機能は次の通り

  • 事前に取得した「コンシューマ・キー」と「コンシューマ・シークレット」を使用して、認証を行う。
    • ツール起動時に、既に認証情報保存先であるiniファイルが存在する場合は、の「コンシューマ・キー」と「コンシューマ・シークレット」が使用される。
    • ツール起動時に、既に認証情報保存先であるiniファイルが存在ない場合は、「コンシューマ・キー」と「コンシューマ・シークレット」の入力が求められる。
  • twitterユーザーの認証は、ブラウザGUI部品で行う。

f:id:mame-tanuki:20100912105145j:image

  • ツールで認証を行って取得した認証情報はiniファイルに保存される。保存されるiniファイルの書式は以下の通り。
[OAuth]
consumer_key=xxxxxxxxxxxxxx
consumer_secret=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
user_id=xxxxxxxx
screen_name=xxxxxxxx
oauth_token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
oauth_token_secret=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  • ツール起動時に、既に認証情報保存先であるiniファイルが存在する場合は、認証によって取得した新たな情報で上書きされる。

■「なこったー」簡易認証ツールの使用上の注意

 iniファイルに保存される「コンシューマ・キー」と「コンシューマ・シークレット」、「アクセストークン」と「アクセストークンシークレット」の4つ全てセットで他人に知られると、twitterアカウントが乗っ取られる危険性があります

 また、「コンシューマ・キー」と「コンシューマ・シークレット」だけでも、外部に流出すればのアプリケーションを詐称した悪意あるアプリケーションが作成される危険性があります

 iniファイルの保管には注意して下さい。他人と共同で使っているパソコンには、このiniファイルを残してはいけません。

■「なこったー」簡易認証ツールの使い方

【準備1】「コンシューマ・キー」と「コンシューマ・シークレット」を取得する

 「なこったーTwitter APIにアクセスするためには、次の二組の認証用文字列必要となります。

  • (1)「コンシューマ・キー」と「コンシューマ・シークレット」
    • Twitter APIにアクセスするアプリケーションのIDキーと、の認証に利用されるシークレット
  • (2)「アクセストークン」と「アクセストークンシークレット」
    • 「なこったー」を利用した「なでしこ」スクリプトが、twitterのID、パスワードを利用せずにtwitterにアクセスするためのトークンと、の認証に利用されるシークレット

 の「なこったー」簡易認証ツールは、上記の「(2)「アクセストークン」と「アクセストークンシークレット」」を簡易取得できるツールです。

 「(1)「コンシューマ・キー」と「コンシューマ・シークレット」」については、Twitter にアプリケーションを登録を行い、事前に取得しておく必要あります。初起動時は、「コンシューマ・キー」と「コンシューマ・シークレット」を取得し、メモしておいてからこのツールを起動して下さい。

 2目以降の起動では、iniファイルに保存された「コンシューマ・キー」と「コンシューマ・シークレット」を読み込みます。

【準備2】OAuth認証情報を保存するiniファイルの保存先を指定

 下記の「なこったー」簡易認証ツールのソースコードで、「INIファイル設定」を各自の環境に合わせて適切なものに書き換えてください。

【追記】「暗証番号」取得失敗時にリトライする処理を追加しました

 ブラウザ部品で「暗証番号」を取得する処理で失敗する事が何度かありました(twitterサーバが重い時?)。こで、「暗証番号」の取得に失敗した時に、10秒待ってリトライする処理を追加しました。

【2011/5/17追記】TwitterのAPI認証URLをSSLに変更などなど

TwitterのAPI認証がSSL暗号通信に変わっていたようなので、以下のように変更。

【変更前】

認証ブラのURL=「http://twitter.com/oauth/authorize

  ↓

【変更後】

認証ブラのURL=「https://twitter.com/oauth/authorize

また、暗証番号(PINコード)取得画面のHTMLソースが色々と変更されていたことにも対応。

【変更前】

 取得暗証番号=ソース\58。

 取得暗証番号=取得暗証番号をトリム

  ↓

【変更後】

 ソース=ソースを「UTF-8」から「SJIS」へ文字コード変換

 取得暗証番号=ソースから「code」のタグ切り出してタグ削除。

■ソースコード

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

!「nakotter.nako」を取り込む。
#-----------------------------------------------------------------------
# 簡易認証用拡張なこったー「MyNakotter」定義
#-----------------------------------------------------------------------
■MyNakotterとは +Nakotter
 ・認証1~
  oauthのリクエストトークン取得処理。
  _ = oauthの認証URL取得。
 ・認証2({文字列}Nから)~
  oauthからNでアクセストークン取得処理。
#-----------------------------------------------------------------------
# GUI定義
#-----------------------------------------------------------------------
認証ブラとはブラウザ。
そのレイアウトは「全体」。
その完了した時は
 状況=認証ブラのURL。
 もし、認証ブラのURL=「https://twitter.com/oauth/authorize」ならば
  暗証番号は、暗証番号取得。
  もし、(暗証番号=「」)ならば
   「暗証番号取得に失敗しました。10秒待ってリトライします」と言う。
   10秒待つ。
   暗証番号は、暗証番号取得。
  ここまで
  もし、(暗証番号=「」)ならば
   「暗証番号の取得に失敗しました」と言う。
  違えば
   なこったークライアントで暗証番号から認証2する。
   それをINIファイルに追加保存。
   「INIファイル保存終了」と言う。
   終わる。
  ここまで

状況とはステータスバー

●暗証番号取得
 ソース=認証ブラのテキスト。
 ソース=ソースを「UTF-8」から「SJIS」へ文字コード変換
 取得暗証番号=ソースから「code」のタグ切り出してタグ削除。
 #取得暗証番号を言う。
 取得暗証番号で戻る。
#-----------------------------------------------------------------------


#「コンシューマ・キー」と「コンシューマ・シークレット」の取得
もし、(INIファイルの存在=はい)ならば、
 INIファイルのINI開いて、ハンドルに代入。
 ConsumerKey=ハンドルで「OAuth」の「consumer_key」をINI読む。
 ConsumerSecret=ハンドルで「OAuth」の「consumer_secret」をINI読む。
 ハンドルのINI閉じる。
違えば、
 ConsumerKey=「Consumer key?」と尋ねる。
 ConsumerSecret=「Consumer secret?」と尋ねる。
ここまで。

# 認証とINIファイルへの保存
「」をINIファイルに保存。#既存のINIファイル中身を消して初期化
INIファイルのINI開いて、ハンドルに代入。
ハンドルで「OAuth」の「consumer_key」にConsumerKeyをINI書く。
ハンドルで「OAuth」の「consumer_secret」にConsumerSecretをINI書く。
ハンドルのINI閉じる。

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

なこったークライアントで認証1する。
認証ブラのURL=それ。
待機。

保存した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読む。
ハンドルのINI閉じる。

なこったークライアントからAPI確認。
それを言う。  #結果→「ok」と表示。