2009-03-25[open-uri][hpricot]日本語URLを含む「こえ部」のタグページを解析する。

こえ部(http://koebu.com)で投稿数が2以上のお題を抽出したいと考えた。
最初はこんな感じでやろうとしたが…
require 'mechanize' url = 'http://koebu.com/topic/tag/男声向け' agent = WWW::Mechanize.new page = agent.get(url) puts page.body.tosjis
「指定したお題が見つかりません」と言われる。どうやら
url = 'http://koebu.com/topic/tag/男声向け'
が上手く認識できてないみたいで以下のようにURLエンコードしてもダメ。
url = 'http://koebu.com/topic/tag/%E7%94%B7%E5%A3%B0%E5%90%91%E3%81%91'
よってopen-urlを使った。(原因を問い詰めないのが俺流)
- URIモジュールにutf8フラグつきの文字列を食わせたらquery_formのエンコードが化けたでござるの巻 - とあるモバイル系エンジニアの日々
- RubyのNokogiriはHTMLの日本語エンコーディングを保持しないので困る++ - きたももんががきたん。
- 【2009/01/18 11:16】
require 'open-uri' require 'hpricot' maxpagenum = 3 limitpost = 2 1.upto(maxpagenum) do |num| doc = Hpricot(open("http://koebu.com/topic/tag/%E7%94%B7%E5%A3%B0%E5%90%91%E3%81%91&page=" + num.to_s)) (doc/%Q[li.unitTi]).each do |elem| if elem.inner_text.slice(%r[\((\d+)\)$], 1).to_i >= limitpost title = elem.to_html.slice(%r[<a href=".*?">(.*)</a>], 1) title = elem.inner_text url = "http://koebu.com/" + elem.to_html.slice(%r[<a href="(.*?)" title="], 1) puts title puts url end end end
これでよし。
Rocky2011/09/08 10:38There's nothing like the relief of fiindng what you're looking for.
ijkspnvvycw2011/09/09 00:02EAaAa2 <a href="http://thqghzsyfbgg.com/">thqghzsyfbgg</a>
qplmxmnngyw2011/09/10 19:12S71y64 <a href="http://vnddcgvcupnd.com/">vnddcgvcupnd</a>
oxbmmbezytn2011/09/12 19:174gYY9T , [url=http://ftmtkfhclunb.com/]ftmtkfhclunb[/url], [link=http://qlupfanwdbjo.com/]qlupfanwdbjo[/link], http://rwlymyurqzsw.com/
2008-12-16
■ [mechanize]2009年Apple StoreのLucky Bag(福袋)の入荷有無を判定するスクリプト

require 'mechanize' require 'kconv' url = 'http://store.apple.com/jp/browse/home/specialdeals/luckybag' agent = WWW::Mechanize.new page = agent.get(url) while /在庫切れ/ =~ page.body.tosjis puts Time.now.to_s + " 在庫切れです" sleep 60 agent = WWW::Mechanize.new page = agent.get(url) end puts "入荷しました!" exit
ちなみにこのスクリプトには致命的な欠陥があり、このままコピペしても正しく判定がされないようになっている。どこが間違いかは親切なブックマーカーが指摘してくれるかもしれない。
プログラミング初心者のid:takerunba氏もボットを作ったらしいが、ちょっとプログラムの知識があればPCの前に張り付いてブラウザの更新ボタン連打せずともAppleの福袋を買えたりするわけだ。元々のIT知識レベルにもよるが、はてな記法を使ってはてダをかけるくらい(世間から見ると)レベルが高い人となら、こんなプログラムは小説1冊読み終わるくらいの時間で書けると思う。
名称未設定何処がどう駄目なのか解りません><
教えて下さい><
teraco× while /在庫切れ/ =~ page.body.tosjis
○ while /<span class="customer_commit_display">在庫切れ<\/span>/ =~ page.body.tosjis
です。Apple福袋のページには在庫表示の箇所以外に「在庫切れ」という文字列が常に含まれているので、修正前のスクリプトではいつまでたっても「在庫切れ」判定となります。
ちなみにApple福袋は購入可能になってから30秒~40秒で即在庫切れらしいので、このスクリプトを動かしてメールでアラートを投げたとしても間に合わないかもしれません。そういう意味では、在庫復活する時間帯を予測して(ランダムではないらしい)その間F5連打するのが確実かもしれません。スクリプトで検知して見に行ったら売れきれは切ないので。
名称未設定返信有り難うです
やっぱり其処が違ってたんですね
「tosjis」が怪しいと思って(ストアのソースに無かったので)外したり
「>在庫切れ<」って入れてみたり色々やってました
> 30秒~40秒で即在庫切れ
かなり厳しい戦いですね
在庫が有った時にパッと音を出せないのかな?と思って検索を掛けたらhttp://www12.atwiki.jp/0141029/pages/304.html内に
print "\x07"
と言うのが有りました
原理は解りませんが試してみたら見事に音が鳴ったので私はこれでやってみようと思います
1日中PCに張り付いて居なければいけないのが難点ですが(笑)
名称未設定35分のは検出出来ませんでしたね。。。
残念です。。。が、カートに入れるボタンの見えるページが載っていたのは収穫です
ボタンの見えるページを基に構文とキーワードを換えてみました
どうでしょうか?採点お願いします><
until /1月2日にお届け/ =~ page.body.tosjis
puts Time.now.to_s + " 在庫切れです"
sleep 60
agent = WWW::Mechanize.new
page = agent.get(url)
end
teracoおお、「1月2日にお届け」って文字列なんですね。いいんじゃないでしょうか。
ちなみに僕はこのスクリプトを作って満足しただけで、実際に福袋争奪戦には参加してません。。。Apple製品もiPodも持ってないので…。
名称未設定今日の分は見事に反応無しで終わってしまいました。。。ガッカリ
別の方法を考えなければ買えそうに無いですね
プログラムを組むのは難しいです
2008-09-10
■ [ftp]rubyでFTP

require 'net/ftp' ftp = Net::FTP.new ftp.connect('[FTPサーバ名]') ftp.login('[ユーザー名]', '[パスワード]') ftp.binary = true ftp.chdir('[アップロード先のパス]') ftp.put('[アップロードするファイルのローカルパス+ファイル名]', '[アップロード先のファイル名]') ftp.quit
net/ftp - バリケンのRuby日記 - Rubyist
ありがとうございました。
アップロードするファイルをフルパスで書かなかったのでちょっと詰まったの内緒。
ところで、net/ftpってあまり良くないって聞いたことあったけど…。気のせいかな。
2008-09-09
■ [mechanize]mechanizeでBASIC認証

# 2008/09/09 自宅ルータのIP取得スクリプト require 'mechanize' require 'kconv' # 0.初期設定 agent = WWW::Mechanize.new agent.auth('user','password') # 1.アクセス page = agent.get('http://192.168.1.1/Status.htm') puts page.body.tosjis
うちのルータのIPを自動取得したかったがあいにくBASIC認証付き。
そんなときでもmechanizeなら簡単にアクセスできます。
2008-09-08
■ [mechanize]某投票サイトに自動で投票するスクリプト

mechanizeでラジオボタンを操作してみた。
# 2008/09/08 自動投票スクリプト require 'mechanize' require 'kconv' # 0.初期設定 group = '[フォーム名]' agent = WWW::Mechanize.new f = open("C:/log.txt", "w") # 1.アクセス page = agent.get('[URL]') # 2.投票 form = page.forms[0] form.radiobuttons.name('g_id')[4].check # 3.念のため投票後のページを取得 mypage = agent.submit(form, form.buttons.first) f.write(mypage.body.tosjis)
一部箇所は伏字にしておりますw
フォームに文字を書き込む例はたくさんあったけど、チェックボックスやラジオボタンに投票するのはあまりなかったので探すのにちょい苦労した。
Idea, Design, Engineering, Architecture, etc: Ruby: Mechanize GUIDE.txt 日本語訳
フォームには6つのラジオボタンがあり、その5番目にチェックを入れて投票ボタンを押すスクリプト。簡単っすね。
AgathaAFACIT you've covered all the bases with this answer!
qyfaqhwziuJGyQy <a href="http://cwhoeajaqksy.com/">cwhoeajaqksy</a>
cadkbcmKZvet , [url=http://xtggqlepunwl.com/]xtggqlepunwl[/url], [link=http://xdrspdimvlsn.com/]xdrspdimvlsn[/link], http://nibybztnuqyq.com/
eymkshSvbDvr <a href="http://qzsdxstlwqdb.com/">qzsdxstlwqdb</a>