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

久保田 吉彦 kubota @ sie.dendai.ac.jp
2009年 9月 28日 (月) 15:18:41 JST


久保田です

増田先生の指摘されたようにUserAgentが設定されていないのが 
原因でした。
UserAgentをテキトーに設定したらエラーになりませんでした。日本語 
がめちゃくちゃですが。
#ByteStringをStringに変換するのってどうやるんでしょうか。

|  writeStream httpRequest httpResponse|
httpRequest := HttpRequest get: 'http://live.nicovideo.jp/recent? 
p=1&tab=common'.
httpRequest userAgent:'VisualWorks'.
httpResponse := httpRequest execute.
JunControlUtility
	assert:[writeStream := 'nico.html' asFilename writeStream]
	do:[writeStream nextPutAll: httpResponse contents]
	ensure:[writeStream close.].



On 2009/09/28, at 14:38, Hidetaka MASUDA wrote:

> 増田です。
>
> 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 メーリングリストの案内