[SML 7674] ニコ生APIのコメントサーバとのやりとりができません
久保田 吉彦
kubota @ sie.dendai.ac.jp
2009年 10月 8日 (木) 12:39:26 JST
こんにちは電大の久保田です。
ニコ生アラートのようなものを以下のURLで公開されている
APIを使ってちょこちょこ書いています。
http://dic.nicovideo.jp/a/%E3%83%8B%E3%82%B3%E7%94%9F%E3%82%A2%E3%83%
A9%E3%83%BC%E3%83%88(%E6%9C%AC%E5%AE%B6)%E3%81%AE%E4%BB%95%E6%A7%98
以下のプログラム(きたないですが)でAPIの使いか
たをちょっと勉強をしているのですが、上記URLのログイン
API、認証APIその2は使えたのですがコメントサーバーの
項目がうまくいきません。
自分ではコメントサーバにXMLを送信してその返事を待つことを
10回くりかえしているつもりですが、コメントにあるように reply :=
stream through: Character cr. を実行するとプログラムが停止して
しまいます(step3がTranscriptに表示されず、ループもそ
こでおわる)。
デバッガ開いて追ってみましたがなぜだかわかりませでした?
Socketプログラムはくわしくないのでおかしなことをしているのでしょ
うか?
また、実行するとException"Unhandled exception:CA Not inTrust
Registry!"と出てきます。いまはProceedボタンを押してプログ
ラムを実行していますが、このExceptionを出さない方法はない
のでしょうか?
作成している環境はVisualWorks7.6NC+Jun784それに
WobSupportパーセルを使っています。
| host port socket connection elements stream reply threadId key
elementCollection pdoc parser httpRequest httpResponse client message |
"ログインAPIその1"
client := Net.HttpClient new.
httpRequest := Net.HttpRequest post:
'https://secure.nicovideo.jp/secure/login?
site=nicolive_antenna'.
httpRequest
userAgent: 'テスト1';
addFormKey: 'mail' value: 'メールアドレス';
addFormKey: 'password' value: 'パスワード'.
httpResponse := client executeRequest: httpRequest.
parser := XML.XMLParser new.
parser validate: false.
pdoc := parser parse: httpResponse decodedContents readStream.
elementCollection := pdoc root elementNamed: 'ticket'.
key := elementCollection elements first text.
Transcript
cr;
show: 'key:' , key.
"認証APIその2"
client := Net.HttpClient new.
httpRequest := Net.HttpRequest post:
'http://live.nicovideo.jp/api/getalertstatus'.
httpRequest
userAgent: 'テスト2';
addFormKey: 'ticket' value: key.
httpResponse := client executeRequest: httpRequest.
parser := XML.XMLParser new.
parser validate: false.
pdoc := parser parse: httpResponse decodedContents readStream.
elements := pdoc root children last.
host := (elements elementsNamed: 'addr') first elements first text.
port := (elements elementsNamed: 'port') first elements first text.
threadId := (elements elementsNamed: 'thread') first elements
first text.
Transcript
cr;
show: host , ':' , port , ':' , threadId.
"コメントサーバー"
socket := SocketAccessor
newTCPclientToHost: host
port: port asNumber.
connection := ExternalConnection new.
connection
input: socket;
output: socket.
stream := connection readAppendStream.
stream lineEndTransparent.
message := '<thread thread=' , threadId ,
' version="20061206" res_from="-1"/>'.
Transcript
cr;
show: message.
10
timesRepeat:
[Transcript
cr;
show: 'step1'.
stream
nextPutAll: message; "<= XMLの送信"
cr;
commit.
Transcript
cr;
show: 'step2'.
reply := stream through: Character cr. "<=ここで
プログラムが止まる"
Transcript
cr;
show: 'step3'].
stream close.
^reply
SML メーリングリストの案内