[SML 7668] Re: HTMLの取得がうまくできません

oku oku @ dream.club.ne.jp
2009年 9月 28日 (月) 15:27:22 JST


おくだいらです。

3ヶ月くらい前に recent 取得時の仕様が変わりました。
公式にアナウンスされたのは見た事ありません。

http://d.hatena.ne.jp/con_mame/20090618

ニコ生アラートを実装するなら 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%28%E6%9C%AC%E5%AE%B6%29%E3%81%AE%E4%BB%95%E6%A7%98

こちらは

> ツールおよびサービスでこれらのAPIにアクセスする時、そのツール名
> /サービス名とバージョン情報が含まれているユーザーエージェントで
> アクセスすることを推奨します。

と書かれています。

Hidetaka MASUDAさんの<4AC04BC9.4030803 @ mail.dendai.ac.jp>から
> 増田です。
> 
> Java と Jun 760 で自分のサーバにアクセスして環境変数の違いを見てみまし
> た。異なっているのは、UserAgent ぐらいでした。
> 
> Java: HTTP_USER_AGENT	Java/1.6.0_05
> Jun:  HTTP_USER_AGENT
> 
> Jun の方は UserAgent が設定されていません。
> 
> 試しに Java の方で UserAgent をなしにしてみると、ニコニコ生放送もエラー
> になります。
> 
> 以下のプログラムの UserAgentなし の行を注釈なしにしてみてください。
> 
> --------------------------- cut here ------------------------------
> import java.io.*;
> import java.net.*;
> 
> class NicoGet {
>     public static void main(String[] args) {
>         try {
>             String urlString =
> "http://live.nicovideo.jp/recent?p=1&tab=common";
> 
>             URL url = new URL(urlString);
> 
>             URLConnection uc = url.openConnection();
>             // uc.setRequestProperty("User-Agent", "");// UserAgentなし
>             InputStream input = uc.getInputStream();
> 
>             int c;
>             while ((c = input.read()) != -1) System.out.write(c);
>             input.close();
>         } catch (MalformedURLException ex) {
>             System.out.println("MalformedURLException: " + ex);
>         } catch (IOException ex) {
>             System.out.println("IOException: " + ex);
>         }
>     }
> }
> --------------------------- cut here ------------------------------
> 
> JunURL でも UserAgent が設定できると大丈夫なような気がするのですが、いか
> がでしょうか。
> 
> # ちょっとブラウズしてみましたがすぐにはわかりませんでしたので、どなたか
> わかる方のフォローをお願いします。
> 
> 久保田 吉彦 さんは書きました:
> > 自家製ニコ生アラートのようなものをVisualWorksで作成しようと思い、下記の 
> > プログラムでニコニコ生放送のページの情報を取得しようとしました。
> > 
> > | anURL readStream writeStream |
> > anURL := JunURL named: 'http://live.nicovideo.jp/recent?p=1&tab=common' .
> > JunControlUtility
> >     assert:[readStream := anURL readStream.
> >             writeStream := 'nico.html' asFilename writeStream]
> >     do:[[readStream atEnd not] whileTrue:
> >             [writeStream nextPutAll:(JunStringUtility getLine: 
> > readStream)]]
> >     ensure:[writeStream close.
> >             readStream close].
> > 
> > 困っているのはWebブラウザでURLを開いたときに取得できるHTMLと異なった情報 
> > を持ってきてしまうことです。
> > nico.htmlを開くと'エラーが発生しました'と書かれたページが表示されます。
> > 
> > いまのところ同じURLのHTMLを取得するプログラムをJavaとPythonで書いてみま 
> > したが、こちらでは期待した情報が得られました。
> > 
> > プログラムのどこがいけないのでしょうか?
> > ご存知の方教えていただけませんでしょうか。
> 
> 
> -- 
> ------
> 〒101-8457 東京電機大学 未来科学部 情報メディア学科  増田 英孝
> E-mail: masuda @ im.dendai.ac.jp                TEL 03-5280-3551
> http://www.cdl.im.dendai.ac.jp/%7emasuda/     FAX 03-5280-3592
> It's more fun to compute!


SML メーリングリストの案内