[表示 : 全て 最新50 1-99 101- 2chのread.cgiへ]
Update time : 05/10 00:24 / Filesize : 38 KB / Number-of Response : 122
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Ruby 初心者スレッド Part 29



1 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 12:55:05 ]
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

   【Ruby1.9.1 は従来版とは異なる部分も多く、書籍や解説やライブラリのサポートがまだありません】
   【自力で解決できない壁で悩むことのない最新安定版の Ruby1.8.7 での学習をお勧めします】
    ※1.8.7 は 1.8 系と 1.9 系の橋渡しをするためのリリースで、1.9 系 の便利新機能の一部が利用可能です

関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。

■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
 ・モジュール名やエラーメッセージでググる
 ・マニュアルで引っかかったクラスの記述を探す www.ruby-lang.org/ja/man/
 ・FAQを一応読む www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
 ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
 ・エラーメッセージ(自力で訳さずなるべくそのままで)
 ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
 ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

110 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 16:19:50 ]
>>109
原因は一発でわかったが、そろそろあんま話したくない
HTTPの知識のない状態でなに作る気なん?

111 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 16:23:31 ]
別にいいじゃん。初心者スレなんだし。
答えるのいやなら他行けば?

112 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 16:25:29 ]
libwww-perlの轍踏む気にはならんね

113 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 16:29:29 ]
まあサイトや回線にどんだけ負荷かけて裁判起こされようが知ったこっちゃないが、
このへんがわかんないのはそもそも辛いと思うんだがどう
open-uri で open してテキストを read する以外の事をしようと思うなら、別途勉強がいると思う

114 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 16:36:36 ]
2chにアクセスするアプリケーションは自力で調べて作ってもらうというのが一応不文律だったりする

115 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 16:43:06 ]
>>109
open-uriは便利に見えるけどハマると厄介、net/httpの使い方をおぼえろ
res = Net::HTTP.get_response(URI(url))
txt = res.body
if res['content-encoding'] =~ /gzip/
 txt = Zlib::GzipReader.wrap(StringIO.new(txt)) {|gz| gz.read }
end
puts txt

>>110
原因を教えてもらえないだろうか?
うちの環境では例外が発生しないので問題がわからない

116 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 16:43:45 ]
content-encoding見てないのはマズいと思うけど
>>109はHTTPレベルの問題じゃないような


117 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 16:45:14 ]
付け加えておくとgzじゃないものを食わせた時は
Zlib::GzipFile::Error: not in gzip format

118 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 16:47:52 ]
もなじら名乗ってない時点で問題外



119 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 16:49:01 ]
>109のスクリプトを書き間違えていました。
============= ここから ============
require 'open-uri'
require 'zlib'
header = {'accept-encoding' => 'gzip'}

url = 'gimpo.2ch.net/bakery/subject.txt' # errorが一度も起きていない
url2 = 'gimpo.2ch.net/kagu/subject.txt' # errorが起きたり起こらなかったりする

open(url, header) do |io|
 Zlib::GzipReader.wrap(io) do |gz|
  puts gz.read # urlの中身が出力されたあとにerrorが起きる
  gz.finish #<= 書き忘れ
 end
end
============= ここまで ============

>110
2chのスレのdatを収集するプログラムです。
たまに気がつくとスレが1001になってdat落ちしてしまって、最後に開いた地点までしか読めなくなるのが悲しいので、
過去に開いたことがあるスレを定期的に拾いなおしてくれるプログラムを作りたいと思いまして。
プログラム自体は完成していて意図した通りに動くのですが、
転送量を少しでも削減したくてdatだけではなくsubject.txtを拾うときにgzip化しようと欲を出したらうまくいかなくなりました。

120 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 16:54:41 ]
スレ更新をせず書き込んでしまいました。

>113
一応、DLする度にsleep 1.0 を入れています。
これでは不十分でしょうか?

>114
それは大変失礼しました。
今後は自力解決したいと思います。

>115
datの取得ではnet/httpを使っています。
一つのdomainから複数のファイルを拾うときにはnet/http, 1つのファイルを拾うだけならopen-uriというふうに使い分けていました。

121 名前:115 mailto:sage [2009/07/06(月) 17:17:01 ]
header渡してなかった
txt = URI(url).read(header)
if txt.content_encoding.include?('gzip')
 :






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<38KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef