[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 メーリングリストの案内