twitter API(日本語訳)
上の記載に従って、まずはBASIC認証でフレンドのタイムラインを取得。
:- encoding(utf8).
:- use_module(library('http/http_client')).
twitter_account('ユーザ名', 'パスワード').
auth_header(request_header('Authorization' = Value)) :-
twitter_account(User, Pass),
format(atom(Codes), '~w:~w', [User, Pass]),
base64(Codes, Base64Codes),
format(atom(Value), 'Basic ~w', [Base64Codes]).
friends_timeline(Response) :-
auth_header(Head),
http_get('http://twitter.com/statuses/friends_timeline.xml',
Response, [Head]).
変数は単一化した後、適当にパースなどする。続いてアップデート。
update(Msg, Reponse) :-
% www_form_encode(Msg, Encoded), <- URLエンコードしたら駄目?
auth_header(Head),
http_post('http://twitter.com/statuses/update.xml',
form(['status' = Msg]), Response, [Head]).
URLエンコードしたらエンコード文字列のまま投稿された。ちなみにレスポンスはutf-8がURLエンコードされて返ってくる。なんで?
ちなみにSWI-Prolog(と大半のProlog処理系)では、文字は内部データベースのatomとなる。文字コードとして扱いたい場合は atom_codes/2 でatomと文字コードリストを交換する。文字コードをそのまま出力ストリーム(user_outputなど)に流すと対応する文字が表示出来る。
?- atom_codes('あいうえお', Codes).
Codes = [12354, 12356, 12358, 12360, 12362].
?- put(12354).
'あ'
ちなみに 12354 = 0x3042 である。そう、この文字コードはUTF-16である。SWI-Prologの文字の内部表現は、実行環境に依存している。そう、私はこれをWindowsXP上で動かしたのだ。
0 件のコメント:
コメントを投稿