python
2012年09月05日
OSXにpythonは入っているが、pipがちゃんと動かない。
homebrewを使って、改めて入れ直すことにする。
OS標準では、/usr/bin/pythonであるが、homebrewは/usr/local/binに入れてくれるので、後でpathを登録する必要がある。
1.HOMEBREWのインストール
|
インストール後の自己診断
|
macportsが入っているから、消せといわれる。
ま、ディレクトリ名を変えておけばいいだろう。
|
ちゃんと通った。
2.pythonのインストール
早速インストールをする。
|
XQuartzがないと怒られる。
pythonでX11がいるとは、驚きだがしかたない。以下からダウンロードして入れる。
3.XQuartzのインストール
以下らからISOをダウンロードして、インストーラを起動。
http://xquartz.macosforge.org/landing/4.pipの修正
再度pythonのインストールをトライ。
|
またエラーが出た。
|
pipをダウンロードしたtar.gzが違うという。
いろいろ試行錯誤をしたが、結局、homebrewに登録されているハッシュ値が間違っているという結論。
以下のコマンドで、ハッシュ値を修正する。
|
変更前の23行めから26行め。
|
以下のように変更。
|
5.最後、ほんとのpythonインストール
これで再度 $ brew install pythonをすると無事終了した。
PATHを/usr/local/binを優先させて。
|
2011年02月17日
google app engine上でEvernote連携のwebサービスを作るには、OAuthでの認証が必要になる。
このエントリーでは、OAuthをGoogle AppEngine上でpythonを使って認証するサンプルプログラムcunsumer_oauth.pyを提供する。
OAuthの直接的な部分は、google codeで提供されているoauth.pyを使い、それの呼び出し方を記述しているのが、consumer_oauth.pyである。
このプログラムは、oauth.pyのライブラリの使い方の参考とすることを目的としているので、元のoauth.pyライブラリに則り、MITライセンスとする。
oauth.pyを使ったサンプルプログラムは、webで調べるとtwitter向きのものが多い。
しかし、Evernoteをproviderとしたとき、同じOAuthでも、twitterとevernoteではパラメータの扱いが若干違うため、そのままは使えない。 そのあたりを修正して、ここにあげておく。
1. OAuthの仕組み
まずは、OAuthの基本的な動きを理解する。
- ゆろよろ日記:OAuthプロトコルの中身をざっくり解説してみるよ
- EvernoteのOAuth仕様を 公式ページで勉強する
2.ライブラリの入手
google codeでは、pythonのOAuthライブラリが ここ で公開されている。
ここでは、exampleとしてoauth.pyを使った client.py というのもあるのだが、これがどうもわかりづらい。
いろいろ探っているうちに、わかりやすいexampleをみつけた。
このexampleは、いろいろミスがあり、動かすためにはかなりの修正が必要となるが、oauth.pyの使い方はとても参考になった。おかげで、oauth.pyを使えたといっても過言ではない。
3.EvernoteからAPI keyの取得
実際に、以下のプログラムを動かすには、Evernoteからconsumer用API keyを入手しなくてはならない。
以下のフォームからEvernoteにAPI keyを申請する。https://www.evernote.com/about/developer/api/
application typeは"web application"とすること。
1,2日でメールで届くはずである。
4.Evernote OAuthの特徴
Twitterなど、あちこちで公開されているOAuthの使用例と比べて、Evernoteでは、以下の2点を注意する必要がある。
- twitter OAuthなどでは、request tokenからaccess tokenに交換するために、承諾されたoauth_okenを送るが、evernoteの場合は、同時にverifierも送らないといけない。
verifierは、エンドユーザが承諾ボタンを押した後のcallback urlで戻ってくるhttp getリクエストの中に、パラーメータとして格納されている。 - 承諾画面より後はevernoteではoauth_secretを使わないので、url encodeされたパラメータ部分で&oauth_secret=&、と値部分がnullになるリクエストが一度だけくる。
1.については、verifierパラメータを抜き出して、リクエストURLを生成時する関数にパラメータを渡すことで対処できる。oauth.pyのライブラリは、verifierをリクエストに加える機能を持っている。
2.については、secretパラメータがnullになるとoauth.pyの中でエラーとなる。ouath.pyの以下の行でエラーを補足し、secretにダミーの文字列をセットすることで対処する。
5.oauth.py変更箇所
137行目から
|
|
6.Access Tokenの保存
consumer webサービスを使うたびに、毎回evernoteで承諾をするのが面倒なので、承諾済みであることをどこかに記録しておきたい。
クッキーを使ってブラウザに保存する方法と、consumerサーバ上に保存する方法がある。
今回作成したconsumer_oauth.pyでは、google app engineのデータストアに保存することにする。 そのため、consumerサービスを使うときは、googleアカウントでのログインを必須とし、GAE上のデータストアにgookeアカウントにひもづくEvernote access tokenを保存することにした。
本当のwebサービスでは、プライバシー保護としてaccess tokenを保存しないオプションを用意する予定である。
7.consumer_oauth.pyの実行
変更済みのoauth.pyとapp.yamlもセットにして、consumer_oauth.pyをgithubで公開したので、以下からダウンロードする。
GAE開発キットが動作する環境であれば、githubからダウンロードした3つのファイルを同一ディレクトリにおいて、開発サーバを起動すれば、ブラウザからアクセスできる。
注意点は、以下の2点である。
- evernote開発環境のアカウント Evernoteでの承諾は、evernoteログインが必要である。(当然だが) このプログラムでは、URLをEvernoteの開発サーバ(sandbox.evernote.com)に指定しているので、本番サーバ(www.evernote.com)のアカウントとは別に、開発サーバ用にユーザ登録をしないとEvernoteにログインはできない。
- Callback URL callback URLは、GAE開発環境(localhost:8080)をデフォルトとしている。GAE上にアップロードする前には、.appspot.com名のホスト名に修正してからアップロードする必要がある。
正常に動作すれば、以下のような画面がブラウザでみれるはず。
1.googleにもEvernoteで承認されていない状態
2.Googleにログインし、Evernoteで承認されていない状態
3.Evernoteで承認する画面
4.Evernoteに承認された状態
これ以降、このoauth_keyをEdamに格納し、Edam_userIdのディレクトリに向かってAPI を呼び出す部分を作ることで、consumerからノートの操作が可能となる。
|
2010年12月10日
pythonでJPEG画像のEXIF情報を扱うのが、けっこう手間取ったので、ここに記しておく。 pythonの日本語情報は、表面的なものはあるけど、ちょっと突っ込んだものはやはり少ないと実感。
exif.pyというライブラリもあるが、追加ライブラリを使わずにやりたかったので、Python Image Libraryを使う。
|
_getexif()で取得したEXIF情報は、DICT型になっている。そして、各要素のKEYは、int型になっているため、このままでは何が何の情報なのか、さっぱりわからない。
ちなみにvalue側は、タプルだったり、stringsだったり、いろいろ違うようだ。ややこしい。
|
そこで、exiftagsというモジュールで、要素の名前に変換してやる。
|
出力は、こんな感じ。
|
なお、37500のexif要素には、何やらバイナリデータが入っていたので(サムネイルか?)、出力をはじいています。
- ブログネタ:
- pythonプログラミング に参加中!
2010年11月19日
rubyをあきらめて、勉強をはじめてみた。
基本構文に慣れるために、簡単な数あてゲームを作った。
コンピュータが乱数で答えを決めて、ユーザに数字を入れさせて、もっと大きくとか、ヒントを出していくもの。
BASICの時代によく作っていたような、単純なものだ。
ルールは以下の通り。
- 答えの値の範囲は、1から100までの間。(冒頭の変数で最小値と最大値は容易に変更できる)
- 正解のプラスマイナス5の範囲に入ったら、”もうちょっと”という表現を使い、推理のヒントにする。
- 正解後、入力履歴を表示する。
コーディングには、以下の点に気をつけた。
- 正しく日本語を扱う
- 入力エラーを厳密に判断する
pythonの特徴は、可読性の良さと、誰が書いても同じようなコードになることだという。
どうでしょうか?
|
実行結果は、以下のようになる。
|