Yahoo Boxが2016年に事実上サービスが終了した。
一応WEB画面でのファイルのアップロード/ダウンロードは可能であるが、複数ファイルを一気にダウンロードできないといった酷い仕様となっている。
とある事情で過去に溜まったYahooBoxのデータをGoogle Driveへ移行しなければいけなくなったので、一括ダウンロードする方法を探してみた。
ちなみに自宅ではこのNASを使ってます。スマホから直接写真を同期する機能や外出先からNASのファイルにアクセス出来る機能なんかもついてて、それでいてGUIが最高です。
[amazonjs asin=”B076HJB5L1″ locale=”JP” title=”【NASキット】Synology DiskStation DS218j デュアルコアCPU搭載多機能パーソナルクラウド 2ベイNASキット CS7088″]
すると、先人がすでに一括ダウンロード機能を備えたRubyのスクリプトを公開していた。
素晴らしすぎる。
http://lp6m.hatenablog.com/entry/2016/08/12/184232
非プログラマの方のために実行手順を示しておく。
【前提事項】Windowsであること
以下よりRubyの実行環境をダウンロードする
https://rubyinstaller.org/downloads/
これでRubyが実行可能となる。このあと以下の2つをダウンロードする
make_cookie.rb
yahoo_box_download.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#Yahoo! Box Downloader | |
require 'mechanize' | |
require 'nokogiri' | |
require 'kconv' | |
require 'scanf' | |
require 'date' | |
require 'uri' | |
require 'json' | |
require 'erb' | |
require 'net/http' | |
require 'open-uri' | |
include ERB::Util | |
cookie_jar_yaml_path = 'yahoo.yaml' #ログイン情報のクッキーを保存したファイル | |
filenum_of_page = 100 #一度に読み込むファイル数 20,50,100のどれか | |
#Yahoo!Boxへアクセス | |
agent = Mechanize.new | |
agent.user_agent_alias = 'Windows IE 7' | |
agent.cookie_jar.load(cookie_jar_yaml_path) | |
page = agent.get('https://box.yahoo.co.jp/user/viewer') | |
#Javascriptの文字列からsid,uniqid,crumb,appidを取り出す | |
tmp_rst = page.search('script')[0] | |
user_parmsstr = tmp_rst.to_s.split("\n")[2].split(',') | |
crumb_parameter = tmp_rst.to_s.split("\n")[3].split(',') | |
appid_parameter = tmp_rst.to_s.split("\n")[4].split(',') | |
sid = user_parmsstr[0].scanf(" User = {\'sid\':\"%s\"")[0].to_s | |
topuniqid = user_parmsstr[1].scanf(" \'uniqid\':\"%s\"},")[0].to_s | |
crumb = crumb_parameter[1].scanf("'bcrumb':\"%s")[0].to_s | |
appid = appid_parameter[0].scanf("\t\t'appid':\'%s")[0].to_s | |
puts appid | |
#scanfうまくいかないのでうしろの"を消す 正規表現ちゃんとかくべき^^; | |
sid = sid[0,topuniqid.index("\"",2)+1] | |
topuniqid = topuniqid[0,topuniqid.index("\"",2)] | |
crumb = crumb[0,crumb.index("\"",2)] | |
appid = appid[0,appid.index("'",2)] | |
puts "sid = #{sid}" | |
puts "uniqid = #{topuniqid}" | |
puts "crumb = #{crumb}" | |
puts "appid = #{appid}" | |
#ここから巡回してファイルをダウンロード | |
folderList = Array.new | |
folderList.push(topuniqid) | |
#folderListが空になるまで巡回する | |
while folderList.size != 0 do | |
#folderListから一つ取り出す | |
nowuniqid = folderList.pop | |
#そのフォルダ内のファイルのリストが書かれたJSONを取得する | |
urlstr = "https://box.yahoo.co.jp/api/v1/filelist/" + sid + "/" + nowuniqid + "?_=" + DateTime.now.strftime('%Q').to_s + "&" | |
urlstr << "results=#{filenum_of_page}&start=1&output=json&sort=%2Bname&filetype=both&meta=1&thumbnail=1&tree=1&sharemembercount=1&ownerinfo=1&boxcrumb=" | |
urlstr << url_encode(crumb) | |
agent.get(urlstr) | |
jsonstr = JSON.parse(agent.page.body.to_s) | |
# 複数ページが存在する場合はまず全ページたどってファイル情報を入手 | |
filenum = jsonstr['ObjectList']['TotalResultsAvailable'].to_s | |
unless jsonstr['ObjectList']['Object'] == nil | |
jsonstr['ObjectList']['Object'].each do |object| | |
type = object['Type'].to_s | |
name = object['Name'].to_s | |
uniqid = object['UniqId'].to_s | |
dlurl = object['Url'].to_s | |
path = "." + object['Path'].to_s #パスの先頭にドットをつけないとうまく相対パスにならない | |
#ファイルかフォルダかで処理を分岐 | |
if(type == 'file') then | |
dlurl << "?appid=#{appid}&error_redirect=1&done=https%3A%2F%2Fbox.yahoo.co.jp%2Ferror%2Fdownload_error&boxcrumb=" | |
dlurl << url_encode(crumb) | |
#dlurlからリダイレクトされたURLを取得 これがダウンロードリンク | |
agent.get(dlurl) | |
redirect_link = agent.page.uri.to_s | |
#ファイルを保存 | |
#File.write(path, Net::HTTP.get(URI.parse(redirect_link))) | |
open(redirect_link) do |file| | |
open(path, "w+b") do |out| | |
out.write(file.read) | |
end | |
end | |
puts "Download #{path}" | |
elsif(type == 'dir') then | |
#folderListに追加してあとで巡回 | |
folderList.push(uniqid) | |
Dir.mkdir(path) | |
end | |
end | |
end | |
end |
以下のようにWindowsボタンを押して「cmd」と打ち込む。
するとコマンドプロンプトが表示されるのでそれをクリックする。

make_cookie.rb を保存した場所まで移動する。例えば、「c:\yahoobox」に「make_cookie.rb」を保存してある場合は「cd c:\yahoobox」と打ち込む。

make_cookie.rbをテキストエディターで開き、次の2箇所を修正する

その後にmake_cookie.rbを実行するがエラーとなるため、以下のように打ち込む。
「gem install mechanize 」
再度実行する

すると以下のように enter captchaと表示されます。
この時点で、make_cookie.rbと同じフォルダに画像ファイルがあります。
その画像に記載されている文字をここへ入力します。

こんなファイルがダウンロードされてます。

入力し終えると処理が進み、「yahoo.yaml」というファイルが出来上がります。
次に同じフォルダに「yahoo_box_download.rb」を配置同じように実行すると、ダウンロードが始まります。
以上です。
スクリプトを開発してくださった方に感謝です。
コメント
神様ありがとう 私のデータ50GBが救えそうです やってみます。
まさるさん、神様はこのプログラムを書いたかたです。もし上手く行かなかったらその事象をここへ書いてくださると今後見た人にとっての神様はまさるさんになります。
初めまして。
さとしと申します。
みなさまの投稿を参考にしながらyahoo boxに保存した大量の画像データのダウンロードに挑戦しております。
同じようなエラーが出るたびに投稿を参考にさせていただき上手くダウンロードを終了する事が出来ましたが
取得したデータ数を確認すると、1フォルダに1000ファイル入っていても最初の100ファイルしかダウンロード出来ていませんでした。
2回実行してみましたが症状は改善しませんでした。
Windows10(64bit)端末から実行して1フォルダから100ファイル以上取得出来ている方はいらっしゃいますでしょうか?
それともWindows7端末からの実行しないと上手く行かないのでしょうか?
Rubyは2.5.1-2(X64)です。
7月5日に書き込んだ まさる です。
時間がなく 保留していたのですが 成功です 現時点で300ファイル以上 吸い上げています 私は50GBのほぼすべての容量使っていたので 最悪な状況でした。 YAHOOにメールしてもろくな返答なく・・・・・ 有料でもダウンロードしてくれとも・・・・ 今回皆様の知恵の記録を参照し ものの20分程度でダウンロード開始までたどりつきました。
私の場合 やはり COOKIEの部分で引っ掛かりましたが けいそう さんの記入内容を頼りに書き換えて無事成功 download.RBは 何も手を加えていません。
皆様 大切なデータ この神様スクリプト を使わせていただいて 早く退避とyahoo-BOXからの避難をしましょう。 重ねて 皆様ありがとうございました。
追記
標準スクリプトだと
フォルダ当たり 100ファイル ダウンロードなので
https://github.com/miyawa-tarou/get_yahoo_box/blob/master/src/yahoo_box_download.rb
のスクリプトを使用させていただきました
みやわさん ありがとう
実績として 約48GB 11000ファイル 救い出し完了。
記事ありがとうございます。
Windows上のRubyで、Mechanizeを使用したコードを動かそうとすると実行時エラー(uninitialized constant Process::RLIMIT_NOFILE)になるという事象があり、調べましたらMechanizeが依存しているあるライブラリの作者がプルリクのmergeされていなかったことが原因と判明とツイッターでお教えいただきました
https://github.com/drbrain/net-http-persistent/pull/90/files
これでめでたしかと思ったのですが、
yahoo.yaml
を作成する際に
No space left on device
でとまってしまいました
現在原因究明中です
取り急ぎご連絡だけさせていただきました
けいそうさん
実行しているパソコンのディスクの容量がいっぱいという事はありませんか?
容量にはまだ十分な余裕があることから、??となっていましたが、容量だけでなく、ファイル数についても何か上限があるようです。
とりあえず今のディスクを動かすことができないので、サブノートなどでこれから試してみます
また連絡いたします
僕の場合は1発OKでしたのですが、いろいろ条件があるのかもですね!
上手くいったらぜひ対策を共有していただきくださいね!
解決しました!
ほかのPCを引っ張り出したりしながら確認しましたが
私の場合
make_cookie.rb
の48行目
puts agent.page.body.to_s.toutf8
を
print agent.page.body.to_s.toutf8
(putsをprintに書き換えた)
らうまくいきました
(Rubyは初心者でこれに変えたことで何が起こるかなど何にも知らない素人です)
ありがとうございます
一括ダウンロードしたく こちらにたどり着き 試みたのですが
うまくいきません。 下のほう数行を貼り付けました
1-8までのエラー?が 表示されます。
WIN7です。
ご指導ねがいます。
2: from C:/Ruby25/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:
in `require’
1: from C:/Ruby25/lib/ruby/gems/2.5.0/gems/net-http-persistent-3.0.0/lib
/net/http/persistent.rb:190:in `’
C:/Ruby25/lib/ruby/gems/2.5.0/gems/net-http-persistent-3.0.0/lib/net/http/persis
tent.rb:205:in `’: uninitialized constant Process::RLIMIT_NOFI
LE (NameError)
C:\y1\1>gem install mechanize
‘gem’ は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
以下よりRubyの実行環境をダウンロードする
https://rubyinstaller.org/downloads/
⬆こちらがうまくいってないのでは?
レスありがとうございます。 HP読み直して 違うPCで再挑戦しました。
WIN7のノートです Rubyの実行環境を2.5から 2.4にしてみました。
OSから Rubyの実行許可を求めるボックスが出たので 許可しました。
エラーの表示が変わり 行数が減りました。 しかし なんのことなのかわかりません。
ご指導願います。
C:\1>make_cookie.rb
C:/Ruby24/lib/ruby/gems/2.4.0/gems/net-http-persistent-3.0.0/lib/net/http/persis
tent.rb:205:in `’: uninitialized constant Process::RLIMIT_NOFI
LE (NameError)
from C:/Ruby24/lib/ruby/gems/2.4.0/gems/net-http-persistent-3.0.0/lib/ne
t/http/persistent.rb:190:in `’
from C:/Ruby24/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in
`require’
from C:/Ruby24/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in
`require’
from C:/Ruby24/lib/ruby/gems/2.4.0/gems/mechanize-2.7.6/lib/mechanize.rb
:6:in `’
from C:/Ruby24/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:133:in
`require’
from C:/Ruby24/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:133:in
`rescue in require’
from C:/Ruby24/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:39:in
`require’
from C:/1/make_cookie.rb:4:in `’
C:\1>gem install mechanize
Successfully installed mechanize-2.7.6
Parsing documentation for mechanize-2.7.6
Done installing documentation for mechanize after 3 seconds
1 gem installed
C:\1>
ゆつもくさん、実を言うと僕もあまり詳しく無いんです。もし、ウイルス対策ソフトなど他のソフト達を動作を完全に止めて実行してみてはいかがしょう?
gem install .echanizeは成功したようですね。1歩前身ですね!頑張ってください!
gem install .echanizeは成功したのですが
Traceback (most recent call last):
8: from C:/yahoo/make_cookie.rb:4:in `’
7: from C:/Ruby25-x64/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:39:in `require’
6: from C:/Ruby25-x64/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:135:in `rescue in require’
5: from C:/Ruby25-x64/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:135:in `require’
4: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize.rb:6:in `’
3: from C:/Ruby25-x64/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require’
2: from C:/Ruby25-x64/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require’
1: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/net-http-persistent-3.0.0/lib/net/http/persistent.rb:190:in `’
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/net-http-persistent-3.0.0/lib/net/http/persistent.rb:205:in `’: uninitialized constant Process::RLIMIT_NOFILE (NameError)
とでてしまい先に進めません。
どうしたら解決するでしょうか?
お手数ですがよろしくお願いします。
杉山様
7/20の下名のコメントをご覧ください
Windows上のRubyで、Mechanizeを使用したコードを動かそうとすると実行時エラー(uninitialized constant Process::RLIMIT_NOFILE)になるという事象があり、調べましたらMechanizeが依存しているあるライブラリの作者がプルリクのmergeされていなかったことが原因と判明とツイッターでお教えいただきました
https://github.com/drbrain/net-http-persistent/pull/90/files
ありがとうございます。やってみます。
何度もすみません。
進むことができたのですが、画像のPW ひらがなを 入力しエンターを押しても反応がありません。
どうしたら良いか教えていただけると助かります。
よろしくお願いします。
補足ですが
ひらがなを入力した後、エンターを押しても反応がなく
再度、エンターを押すと下記にようになります。
enter captcha:みとんひをなお
i got captcha���݂Ƃ�Ђ�Ȃ�
!!!SECURITY WARNING!!!
The SSL HTTP connection to:
login.yahoo.co.jp:443
!!!MAY NOT BE VERIFIED!!!
On your platform your OpenSSL implementation is broken.
There is no difference between the values of VERIFY_NONE and VERIFY_PEER.
This means that attempting to verify the security of SSL connections may not
work. This exposes you to man-in-the-middle exploits, snooping on the
contents of your connection and other dangers to the security of your data.
To disable this warning define the following constant at top-level in your
application:
I_KNOW_THAT_OPENSSL_VERIFY_PEER_EQUALS_VERIFY_NONE_IS_WRONG = nil
Traceback (most recent call last):
C:/yahoo/make_cookie.rb:43:in `’: undefined method `value=’ for nil:NilClass (NoMethodError)
杉山様と同じエラーで進めません。
非プログラマの初心者です。
Windows上のRubyで、Mechanizeを使用したコードを動かそうとすると実行時エラー(uninitialized constant Process::RLIMIT_NOFILE)になるという事象があり、調べましたらMechanizeが依存しているあるライブラリの作者がプルリクのmergeされていなかったことが原因と判明とツイッターでお教えいただきました
https://github.com/drbrain/net-http-persistent/pull/90/files
上記の手順がわかりません。
どなたかご教授頂けないでしょうか。
たけださま
Rubyのフォルダにある
persistent.rb
(検索していただけると出ると思います。私は
C:\Ruby25-x64\lib\ruby\gems\2.5.0\gems\net-http-persistent-3.0.0\lib\net\http
のフォルダにありました)
をTerraPadのようなエディタで開いていただき
https://github.com/drbrain/net-http-persistent/pull/90/files
に書いてあるように205行目を削除し(ピンク部分)
205行目から209行目を追加して保存していただければ動くはずです
(念のためpersistent.rbは名前を変えてコピーをとっておいてください)
ご検討をお祈りしております
上手くいくといいですね!
けいそう様
nopainnogain様
いつもありがとうございます。
昨日その後、文字(ひらがな)入力時に発生したエラーですが
本日セキュリティソフトを一時的に停止しても同じエラーが発生しました。
他に同様のエラーが発生した方はおられますでしょうか。
たけだ様
けいそうです
こちら、キャプチャで取得した画像に示されたひらがなが間違っていないでしょうか?
グニャグニャ曲がってみづらいですが、私も文字を間違えるとこういう内容のエラーが出ます
けいそう様
たけだです。いつもありがとうございます。
何度かトライしていたのですが、やはり同様のエラーが表示されてしまいます。
正しい文字でも誤った文字でも同じエラーが返されます。
文字入力でないところに問題があるのでしょうか?
たけだ様
えんどうです
正常に動いた場合でも同じ文が4回繰り返された後(ひらがな入力後エンター一回だけです)なんか読み込んでいるみたいです
(私はその後また書き込めないエラーが出ていますorz)
すいません、解決ではないですが状況だけ報告します
すみません。詳細を記載いたします。
gem install .echanizeは成功しましたが、下記エラーが表示されます。
Traceback (most recent call last):
8: from C:/yahoobox/make_cookie.rb:4:in `’
7: from C:/Ruby25-x64/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:39:in `require’
6: from C:/Ruby25-x64/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:135:in `rescue in require’
5: from C:/Ruby25-x64/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:135:in `require’
4: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize.rb:6:in `’
3: from C:/Ruby25-x64/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require’
2: from C:/Ruby25-x64/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require’
1: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/net-http-persistent-3.0.0/lib/net/http/persistent.rb:190:in `’
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/net-http-persistent-3.0.0/lib/net/http/persistent.rb:205:in `’: uninitialized constant Process::RLIMIT_NOFILE (NameError)
その後先に進めません。
どなたかご教授の程よろしくお願いいたします。
けいそう様
nopainnogain様
コメントに気づかず連投失礼いたしました。
トライ後またコメントさせていただきます。
ありがとうございます。
まったく問題ありません。上手くいくことを祈ってます!
文字入力後、下記のようなエラーが表示されました。
enter captcha:となおかけみゆよも
i got captchaニ�となおかけみゆよも
Traceback (most recent call last):
13: from C:/yahoobox/make_cookie.rb:39:in `’
12: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:271:in `submit’
11: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize.rb:584:in `submit’
10: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize.rb:1313:in `post_form’
9: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:394:in `request_data’
8: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:346:in `build_query’
7: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:346:in `each’
6: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:347:in `block in build_query’
5: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:284:in `proc_query’
4: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:284:in `map’
3: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:285:in `block in proc_query’
2: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:291:in `from_native_charset’
1: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize/util.rb:77:in `from_native_charset’
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize/util.rb:77:in `encode’: “\xFF” on Windows-31J (Encoding::InvalidByteSequenceError)
どうしたよいのでしょうか。
何度も申し訳ございません。
ご教授いただければ幸いです。
けいそう様
いつもありがとうございます。
エンター1回のみだと反応なく、2回目でエラーが返される状況です。
また岡田様、あやこ様のコメントを参考にしてみたのですが、変化なく・・・。
i got captchaケ�せとけちんなよ
Traceback (most recent call last):
13: from C:/yahoobox/make_cookie.rb:39:in `’
12: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:271:in `submit’
11: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize.rb:584:in `submit’
10: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize.rb:1313:in `post_form’
9: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:394:in `request_data’
8: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:346:in `build_query’
7: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:346:in `each’
6: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:347:in `block in build_query’
5: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:284:in `proc_query’
4: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:284:in `map’
3: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:285:in `block in proc_query’
2: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:291:in `from_native_charset’
1: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize/util.rb:77:in `from_native_charset’
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize/util.rb:77:in `encode’: “\xFF” on Windows-31J (Encoding::InvalidByteSequenceError)
プログラムしたこともない初心者です。使っている端末がWindows10なので上手く行かないのでしょうか?Cドライブの空きは165GBあります。キャプチャひらがな取得までは辿り着けましたが、現在こんな反応で滞っております。
どなたかアドバイス頂けると助かります。
enter captcha:ひんかんすてえへせ
i got captchaミ�ひんかんすてえへせ
C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/mechanize-2.7.6/lib/mechanize/util.rb:77:in `encode’: “\xFF” on Windows-31J (Encoding::InvalidByteSequenceError)
from C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/mechanize-2.7.6/lib/mechanize/util.rb:77:in `from_native_charset’
from C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:291:in `from_native_charset’
from C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:285:in `block in proc_query’
from C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:284:in `map’
from C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:284:in `proc_query’
from C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:347:in `block in build_query’
from C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:346:in `each’
from C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:346:in `build_query’
from C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:394:in `request_data’
from C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/mechanize-2.7.6/lib/mechanize.rb:1313:in `post_form’
from C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/mechanize-2.7.6/lib/mechanize.rb:584:in `submit’
from C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:271:in `submit’
from C:/yahoobox/make_cookie.rb:39:in `’
c:\yahoobox>
はじめまして。何度試してみてもmake_cookie.rbの後のenter captchaが出てこずに以下になってしまいます。。。このエラーはなんでしょうか?どなたかご教授ください!!
c:\yahoobox>make_cookie.rb
Traceback (most recent call last):
6: from C:/yahoobox/make_cookie.rb:4:in `’
5: from C:/Ruby25-x64/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:39:in `require’
4: from C:/Ruby25-x64/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:135:in `rescue in require’
3: from C:/Ruby25-x64/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:135:in `require’
2: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize.rb:6:in `’
1: from C:/Ruby25-x64/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require’
C:/Ruby25-x64/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require’: C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/net-http-persistent-3.0.0/lib/net/http/persistent.rb:205: invalid multibyte char (UTF-8) (SyntaxError)
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/net-http-persistent-3.0.0/lib/net/http/persistent.rb:205: syntax error, unexpected end-of-input, expecting keyword_end
��� Gem .win_platform�H����
Capcha画像はDL出来ているのでしょうか?
プログラム分からない自分からのコメントで的外れの可能性大ですが、
私の場合、下記日時のコメントを追従することで画像をDL出来るようになりました。
けいそう · 2018年8月29日 at 16:26
そこから先に進められていませんが・・・。^^;
はい、最初にコメント欄を拝見してpersistent.rbの205行目~209行目を追加しました。その際には
Traceback (most recent call last):
8: from C:/yahoobox/make_cookie.rb:4:in `’
7: from C:/Ruby25-x64/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:39:in `require’
6: from C:/Ruby25-x64/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:135:in `rescue in require’
5: from C:/Ruby25-x64/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:135:in `require’
4: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize.rb:6:in `’
3: from C:/Ruby25-x64/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require’
2: from C:/Ruby25-x64/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require’
1: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/net-http-persistent-3.0.0/lib/net/http/persistent.rb:190:in `’
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/net-http-persistent-3.0.0/lib/net/http/persistent.rb:205:in `’: undefined method `”win_platform\uFF1Fthen”‘ for Gem:Module (NoMethodError)
Did you mean? win_platform?
となりました。
その後、いじっているうちに質問のような結果になりました。まだcaptchaはDLできていません><
あやこ様
gem install mechanize
はされていますか?
けいそう様
しました!これは成功しました。
はじめまして。何度試してもmake_cookie.rbの後、enter captchaされません。。。以下が表示されるのですが、このエラーはなんでしょうか?どなたかご教授ください!
c:\yahoobox>make_cookie.rb
Traceback (most recent call last):
6: from C:/yahoobox/make_cookie.rb:4:in `’
5: from C:/Ruby25-x64/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:39:in `require’
4: from C:/Ruby25-x64/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:135:in `rescue in require’
3: from C:/Ruby25-x64/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:135:in `require’
2: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize.rb:6:in `’
1: from C:/Ruby25-x64/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require’
C:/Ruby25-x64/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require’: C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/net-http-persistent-3.0.0/lib/net/http/persistent.rb:205: invalid multibyte char (UTF-8) (SyntaxError)
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/net-http-persistent-3.0.0/lib/net/http/persistent.rb:205: syntax error, unexpected end-of-input, expecting keyword_end
��� Gem .win_platform�H����
アドバイスありがとうございました!
お陰様でその後、enter captchaのひらがな入力まで進むことが出来、読み込みでエラーとなりましたがuntil.rbの106行目を NKF.guess(src) || Encoding::UTF8に書き換えたところ無事yahoo.yamlが出来上がりました。が最後の作業でエラーとなってしまいます・・・
>次に同じフォルダに「yahoo_box_download.rb」を配置同じように実行すると、ダウンロードが始まります。
のところですが、「yahoobox」のフォルダ内にcaptcha1536452604、make_cookie.rb、yahoo_box_download.rb、yahoo_yamlの四つを配置した状態でyahoo_box_download.rbを下記のような実行するとエラーになります。
c:\yahoobox>yahoo_box_download.rb
Traceback (most recent call last):
C:/yahoobox/yahoo_box_download.rb:29:in `’: undefined method `split’ for nil:NilClass (NoMethodError)
参考にしたくてコメントさせて頂きます。
until.rbってどこにあるんですかね?検索はかけてみたのですが見つかってません。
私の場合はこれが見つからないのがエラー原因なのかな、とも思うようになってきてます。
岡田様
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize/util.rb
です。
ありがとうございました。untilではなくutilでしたね。^^;
参考にさせてもらったものの、yahoo.yamlがまだ作成出来ずです。残念。
上手く進んだ場合、yahoo.yamlはどこに保存されるのですか?
あ、そうです。打ち間違いでしたすみません。あれからエラーと格闘して昨夜、ようやく画像と動画をダウンロードすることに成功しました。こちらのサイトの皆様には大変感謝しております。ありがとうございました!
ちなみにyahoo.yamlと同じフォルダにヤフーボックスと同じファイル名ができて保存されました。
終わってみるとVS CODEで手を加えたrubyファイルはこちらで参考にしたpersistentの205~209行目と、utilの106行目でした。persistentの方は日本語の「次に」をnextと打っていましたが途中でthenに打ち換えました。enter captchaのひらがな入力前に出てきた(UTF-8) (SyntaxError)はencodeによるもので、enter captchaごのダウンロードできなかったのはヤフーのパスワードが間違ってました。
あやこさん、解決したようでおめでとうございます。羨ましい・・・w
こちらyahoo.yamlがまだ出来ない・・・で停滞しております。
何度も試行錯誤して気になっているのは、こんなところです。
1.Windows10では出来ない作業かもしれない。
2.毎回 gem install mechanize しているのがまずい?
3.現在の状況は次のような感じですがEncoding::InvalidByteSequenceErrorにどう対応していいものやら全く分からない・・・。
i got captchaミ�ひんすへよそんや
C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/mechanize-2.7.6/lib/mechanize/util.rb:77:in `encode’: “\xFF” on Windows-31J (Encoding::InvalidByteSequenceError)
from C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/mechanize-2.7.6/lib/mechanize/util.rb:77:in `from_native_charset’
from C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:291:in `from_native_charset’
from C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:285:in `block in proc_query’
from C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:284:in `map’
from C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:284:in `proc_query’
from C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:347:in `block in build_query’
from C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:346:in `each’
from C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:346:in `build_query’
from C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:394:in `request_data’
from C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/mechanize-2.7.6/lib/mechanize.rb:1313:in `post_form’
from C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/mechanize-2.7.6/lib/mechanize.rb:584:in `submit’
from C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/mechanize-2.7.6/lib/mechanize/form.rb:271:in `submit’
from C:/yahoobox/make_cookie.rb:39:in `’
c:\yahoobox>
出来ました!!やった~。(現在DL中)
プログラム全く分からない自分なので的外れなことかもしれませんが
解決に至った作業は、
make_cookie.rbでの二か所編集を『cmdを開いてから行う』ということです。
二カ所編集はcmdを開く前にしておりました。
提示された順番で作業すれば難無く処理出来ていた可能性大です。
ありがとうございました。
16GB助かりそうです。
とてもじゃないが1枚1枚DLする気にならずですよね。w
あやこ様
こちらで何度も質問させていただき、何とかyahoo.yamlダウンロードまでこぎつけました。
>のところですが、「yahoobox」のフォルダ内にcaptcha1536452604、make_cookie.rb、yahoo_box_download.rb、yahoo_yamlの四つを配置した状態でyahoo_box_download.rbを下記のような実行するとエラーになります。
データを別フォルダに分けたり試してみたのですが、同じエラーが発生してしまいます。
あやこ様が具体的にどのように対処したのか教えていただけないでしょうか。
たけだ様
最後のところですね!あとちょっと!
初心者の私がお答えするのもおこがましいのですが、ご質問のところ。エラー内容がundefined method `split’ for nil:NilClass (NoMethodError)でしたのでmake_cookie.rbのコードの中でsplitで検索をかけ、28~30行目のsplit前後を自分でいじってしまった結果、(“\n”)が(“/n”)になっていたことによるエラーでした。エラー表記が同じでも内容はたけださんと違うかもしれません。ただ、エラーが出たからこそいじったものなので最初にそのエラーが出た原因はsplit前後をいじる前にyahooログインのパスワードを間違って入力していたためと思います。
それから、rbの実行にはcmd with rubyを使っていましたが最終的にDLできたときはこれを一度タスクバーにしまってPCのcmdでyahoo_box_download.rbを実行しました。
エラーのnil:NilClassをググってみたら空のファイルなどの意味とかだったような。。私の場合ですが、yahooにアクセスしてもmake_cookieで入力したパスが違っていたのでファイルが無いと言われたんだと思います。IDとパスワードは大文字小文字が逆だったりしていませんか?
あれこれいじったせいなのか、DLした画像が全て壊れてました。
YahooBoxから直接DLした画像は壊れないのを確認しましたので、
もう一度最初からやり直してみます。
ちゃんとした画像がDL出来てます!!
僕の場合、util.rbをUTF8ではなくUTF16にすることでで上手く行きました。
UTF32でもダメでした。
先ほど書き込みした、make_cookie.rbの変更作業ポイントは、関係無いかもしれません。
何故かUTF8でつながりましたが、DLしたもの全て壊れてました。
なお、gem install mechanize の作業を行うと、
util.rbが変更前に戻ってしまうようです。
おめでとうございます! 😸
岡田様
わ!おめでとうございます~
大分苦戦したのでお気持ち察します。自分のことのようにうれしい気持ちですw
UTF16でできたとは。8が通常と思っていたので私なら16を試さなかったと思います。色々試して正解だったのですね。もう済んだことなのでいいのかもしれませんが、make_cookie.rbの二か所編集やutil.rbの編集が元に戻ってしまう現象(完全に上書きされない?)はなぜなのか気になりました。編集は何のアプリで行われたのでしょうか?私はvisualStudiocodeを使いました。設定をオートセーブにして編集したものはその都度上書きされていましたが、メモ帳やテラパッドか何か?で書くと元に戻る場合があるのでしょうか?
同じ現象はありました。util.rbに限りません。
僕が使用していたのは、メモ帳あるいはワードパッドです。
どちらも行数を簡易に辿れないので、数えるか単語検索するかで対応してました・・・。
上書きした筈が上書きされていなかった現象については
僕の場合、gem install mechanizeを毎回行っていましたので、
このinstall作業によるものかと勝手に考えてました。
ありがとうございます。
DLした画像をExifで整理しようとしたら1/3がExif情報なしと出てきました。
これからはその対応をコツコツやっていこうかと思ってます。
皆様
色々とご尽力いただきありがとうございました。
なんとかダウンロードに成功し、昨日午後からスタートし今朝ようやく作業が完了しました。
作業が丸1日かかったのは1回のダウンロードで1フォルダにつき100個でダウンロードが完了するため。合計30GB約10,000データあったので100回はダウンロードを繰り返すこととなりました。
とはいえとても1つずつクリックでできる量ではないため非常に助かりました!
解決に至った方法を素人ながらこれから報告します。
基本的には記載されている手順で問題ないです。
ところが何度もエラーが返されてしまい私の場合下記の手順で解決となりました。詳細は皆さまのコメントをご参照くださいませ。
①make_cookie.rbとyahoo_box_download.rbをダウンロード
②Cドライブに新規フォルダ作成しmake_cookie.rbを移動
③make_cookie.rbのID・PWを修正
④persistent.rbの205~209行目を修正(コメント参照)
⑤cmdで「gem install mechanize」を実行(インストール)
⑥utilの106行目を「NKF.guess(src) || Encoding::UTF8」に修正
⑦cmdでmake_cookie.rbを実行
⑧②のフォルダに保存された画像のひらがなをメモ
⑨cmdに⑧のひらがなをいきなり入力すると何故か謎の空白が頭に入って入力誤りになるので、一度半角英数を1文字入力して消すか、『echo ひらがな| ruby teststdin.rb』と入力する。エラーが発生したら⑤に戻る。
⑩②のフォルダにyahoo.yamlが保存される。yahoo_box_download.rbを同じ場所にコピーで持ってくる。
⑪cmdでyahoo_box_download.rbを実行。エラーが発生したら⑤に戻る。
⑫成功すれば②のフォルダにダウンロードされていく。1度の実行で1フォルダ100ファイルまで。2回目実行する場合は既に保存されたデータがフォルダに残っているとエラー。また途中に.lzhデータがあるとエラー(これだけ手動で落としました)。
私の場合⑪で何度も下記エラーで苦しみました。
C:/yahoobox/yahoo_box_download.rb:28:in `’: undefined method `split’ for nil:NilClass (NoMethodError)
結局最後まで不明でしたが別PCで作業するとあっさりクリアできました。それでも急に上記エラーが出たりするのでwifi環境を変えたり⑤まで戻るを繰り返してなんとか突破しました。
以上です。
最後になりますが何度も質問に答えてくださったけいそう様、nopainnogain様、あやこ様本当にありがとうございました!
30GBもの人質が解放され心置きなくプレミアム解約できそうです(笑)
これからはデータの保管もよく考えることにします。色々勉強になりました(^^)
たけださんに質問させて頂きます。
先ほど「さとし · 2018年9月20日 at 13:39」の投稿を読ませてもらったのですが、
どうやら私は一回(100ファイル)で終えていたようです。
書かれている⑫を繰り返すにあたり、”既に保存されたデータがフォルダに残っているとエラー”と
ご説明されていますが、既に保存されたデータとは、先にDLした100ファイルでしょうか?
100ファイルをフィルだ外に移動したら、また同じ100ファイルを落とす形になりやしないか、
確認したくてコメントさせて頂きました。
ご回答あると助かります。
岡田様こんにちは。
>100ファイルをフィルだ外に移動したら、また同じ100ファイルを落とす形になりやしないか、
説明不足でした。
ダウンロードしたらその都度ヤフーボックスから手動で消しておりました。
たけださん。早々にご回答ありがとうございました。
削除であれば一括簡単なのかもしれませんね。
質問書き込みしたすぐ後に、
オリジナルファイルが放置してたHDDから見つかりまして・・・。
不要作業となりました。。。
さとしさんの方で参考になってくれれば御の字です。
岡田さん、たけださん、こんにちは。
ご回答ありがとうございました。
とっても参考になりました。
ダウンロードしたファイルを削除しながら作業を進めたいと思います。
ありがとうございました!
みなさまのコメントを参考に回収できました。ありがとうございました。
数年悩んでた悩みが解決できました。
私も100ファイルずつですが、削除は一括でできるので、
この方法で回収させていただきます。
皆様の書き込みも大変参考になりました。
私はこのページにある内容の対応ですべてクリアできそうです。
実行OSはWindows10になります。
ありがとうございました。
超たすかりました。。雑務に感謝!!!
100件しか取れないのは以下の感じで書き換えたら(多分)全件とれるようになりました(rubyはよくわからないので書き方適当なのと関係ない自分用の修正も入ってますが)
https://github.com/miyawa-tarou/get_yahoo_box/blob/master/src/yahoo_box_download.rb
私はかなりフォルダ分けしてたので一つずつ100件消すのはかなり大変でしたので。。。
あと下のようにcaptchaを入力したものを出力したものが文字化けしたときは、ずっと動きませんでした
i got captcha���݂Ƃ�Ђ�Ȃ�
私の場合はrubyを再インストールしたら文字化けしないようになり、ちゃんと動くようになりました
初めまして。
Yahooboxが一括でできると読んで、実行したいのですがプログラムがわからず最初から躓いています。
Rubyのダウンロードもたくさんあり、どれを選んでいいのかわからず、make_cookie.rbとyahoo_box_download.rbをダウンロードも調べたんですがどうやってやるのかわからず。
本当申し訳ないのですが、ド素人でもわかるように教えていただけないでしょうか。
誰も教えてくださらないようなので、一括はあきらめます。
自分でもやってみましたが、先に進みませんし。
お手数おかけしますが、私のコメント削除していただければと思います。
やった事をもう少し具体的に記載されるとお返事もされやすいと思いますよ✨
依然にlp6m’sさんのブログを見て挑戦し無事失敗した者です。こちらではさらに詳しく解説してくださっていて大変ありがたいです。たけださんのまとめコメントがとても分かりやすかったです。無事にダウンロードが開始されるところまでたどり着けましたが,ダウンロードの途中で下記エラーが発生します。
Traceback (most recent call last):
10: from J:/Backup/yahoo_box_download.rb:62:in `’
9: from J:/Backup/yahoo_box_download.rb:62:in `each’
8: from J:/Backup/yahoo_box_download.rb:77:in `block in ‘
7: from C:/Ruby25-x64/lib/ruby/2.5.0/open-uri.rb:35:in `open’
6: from C:/Ruby25-x64/lib/ruby/2.5.0/open-uri.rb:735:in `open’
5: from C:/Ruby25-x64/lib/ruby/2.5.0/open-uri.rb:165:in `open_uri’
4: from C:/Ruby25-x64/lib/ruby/2.5.0/open-uri.rb:224:in `open_loop’
3: from C:/Ruby25-x64/lib/ruby/2.5.0/open-uri.rb:224:in `catch’
2: from C:/Ruby25-x64/lib/ruby/2.5.0/open-uri.rb:226:in `block in open_loop’
1: from C:/Ruby25-x64/lib/ruby/2.5.0/open-uri.rb:755:in `buffer_open’
C:/Ruby25-x64/lib/ruby/2.5.0/open-uri.rb:377:in `open_http’: 403 Forbidden (OpenURI::HTTPError)
ダウンロードされているファイルの順番から,サイズ120MBのzipファイルのダウンロードエラーと推測されます。こちらのスクリプトでファイルのサイズや種類でのダウンロード制限はありますでしょうか?ご教授願えましたら幸甚です。
こんにちは、
Yahooプレミアム解約前にやることとしてたどり着きました。
記載の手順に従い作業して、最初ファイルはサイズの小さいテキストファイルがひとつだけダウンロードできましたが、エラーでとまります。
Yahooboxのルートにあった、数個のファイルを手動ダウンロード後削除し、フォルダだけにしたところフォルダ内の複数ファイルのダウンロードができるようになりました。
until.rbは書きかえていません(そのままでどうなっているか中身も見ていない)が、yahoo.yamlは出来ています。
ただし、接続スピードが遅いためおそらくタイムアウトでひとつで1GBファイルのダウンロードでエラーとなり、これは手動でダウンロードしました。
フォルダ毎のダウンロードで、コメントの通り削除しながらで、完全自動で全てのフォルダとファイルがダウンロードできるわけではありませんが、これで何とか数千から万?のファイル全てローカルに落とせそうです。
キャプチャはイルファンビューでは非常に見難く、試した中ではペイントが一番見やすかったです。
皆様のおかげでかなり短時間でここまでできました。プレミアム解約できそうです。
時間を使って、作っていただいた作者様、コメントの皆様ありがとうございました。
記事ありがとうございます。
yahoo_box_download.rbを下記のように書き換え何回か繰り返し実行することで、Http403のエラーで取得できなかったものも取得できるようになりました。
・すでに取得済みのフォルダは作成スキップ・・・再実行時エラーにならない
・すでに取得済みのファイルは取得スキップ・・・繰り返し実行で大容量でHttp 403エラー発生を回避
Http403で困っているかたの参考になれば幸いです。
ーー
#Yahoo! Box Downloader
require ‘mechanize’
require ‘nokogiri’
require ‘kconv’
require ‘scanf’
require ‘date’
require ‘uri’
require ‘json’
require ‘erb’
require ‘net/http’
require ‘open-uri’
include ERB::Util
cookie_jar_yaml_path = ‘yahoo.yaml’ #ログイン情報のクッキーを保存したファイル
filenum_of_page = 100 #一度に読み込むファイル数 20,50,100のどれか
#Yahoo!Boxへアクセス
agent = Mechanize.new
agent.user_agent_alias = ‘Windows IE 7’
agent.cookie_jar.load(cookie_jar_yaml_path)
page = agent.get(‘https://box.yahoo.co.jp/user/viewer’)
#Javascriptの文字列からsid,uniqid,crumb,appidを取り出す
tmp_rst = page.search(‘script’)[0]
user_parmsstr = tmp_rst.to_s.split(“\n”)[2].split(‘,’)
crumb_parameter = tmp_rst.to_s.split(“\n”)[3].split(‘,’)
appid_parameter = tmp_rst.to_s.split(“\n”)[4].split(‘,’)
sid = user_parmsstr[0].scanf(” User = {\’sid\’:\”%s\””)[0].to_s
topuniqid = user_parmsstr[1].scanf(” \’uniqid\’:\”%s\”},”)[0].to_s
crumb = crumb_parameter[1].scanf(“‘bcrumb’:\”%s”)[0].to_s
appid = appid_parameter[0].scanf(“\t\t’appid’:\’%s”)[0].to_s
puts appid
#scanfうまくいかないのでうしろの”を消す 正規表現ちゃんとかくべき^^;
sid = sid[0,topuniqid.index(“\””,2)+1]
topuniqid = topuniqid[0,topuniqid.index(“\””,2)]
crumb = crumb[0,crumb.index(“\””,2)]
appid = appid[0,appid.index(“‘”,2)]
puts “sid = #{sid}”
puts “uniqid = #{topuniqid}”
puts “crumb = #{crumb}”
puts “appid = #{appid}”
#ここから巡回してファイルをダウンロード
folderList = Array.new
folderList.push(topuniqid)
#folderListが空になるまで巡回する
while folderList.size != 0 do
#folderListから一つ取り出す
nowuniqid = folderList.pop
#そのフォルダ内のファイルのリストが書かれたJSONを取得する
urlstr = “https://box.yahoo.co.jp/api/v1/filelist/” + sid + “/” + nowuniqid + “?_=” + DateTime.now.strftime(‘%Q’).to_s + “&”
urlstr
HTTP403エラーで困っていたものです。たけだ様のコメントに「.lzhでエラー」を見つけて,ファイルの種類が原因と思い,lzhだけでなくzip, cabなどの圧縮ファイルを手動でダウンロードの後に削除し,その後はエラーなくダウンロードできていました,,がっ!サイズの大きいPDFファイルで再度HTTP403エラーが出現しました。20~30MB程度のサイズのPDFは問題なくダウンロードできています。HTTP403エラーはサイズの問題なのでしょうか。
し様の修正スクリプトでは大きなサイズのファイルもダウンロード可能でしょうか?既出のみやわ様のスクリプトで取得済みのファイル・フォルダをスキップは可能ですので,JPGファイルなどの膨大なファイルが一括ダウンロードできています。大変感謝しております!
(ちなみに現在までに約15000ファイル,19/45GBまで一括ダウンロード中です)
皆様のコメントを見ましたがキャプチャー文字入力後から以下のエラーで進めません。
コメントの通りにやれることはやったつもりですが、どうやってもここから先に進めません。
プログラミングは全くの素人ですので分かりやすく教えていただけると助かります。。
なんかもうひとつずつファイルを落としたほうが早い気がしてきました・・・(かなりの数があるので最後の手段にはしたいのですが・・・)
i got captchaecho ふてたけのよかみ| ruby teststdin.rb
!!!SECURITY WARNING!!!
The SSL HTTP connection to:
login.yahoo.co.jp:443
!!!MAY NOT BE VERIFIED!!!
On your platform your OpenSSL implementation is broken.
There is no difference between the values of VERIFY_NONE and VERIFY_PEER.
This means that attempting to verify the security of SSL connections may not
work. This exposes you to man-in-the-middle exploits, snooping on the
contents of your connection and other dangers to the security of your data.
To disable this warning define the following constant at top-level in your
application:
I_KNOW_THAT_OPENSSL_VERIFY_PEER_EQUALS_VERIFY_NONE_IS_WRONG = nil
Traceback (most recent call last):
D:/TokyoLoader/make_cookie.rb:43:in `’: undefined method `value=’ for nil:
NilClass (NoMethodError)
c:\xxxx>
皆様のコメントを見ましたがキャプチャー文字入力後から以下のエラーで進めません。
コメントの通りにやれることはやったつもりですが、どうやってもここから先に進めません。
プログラミングは全くの素人ですので分かりやすく教えていただけると助かります。。
なんかもうひとつずつファイルを落としたほうが早い気がしてきました・・・(かなりの数があるので最後の手段にはしたいのですが・・・)
i got captchaecho ふてたけのよかみ| ruby teststdin.rb
!!!SECURITY WARNING!!!
The SSL HTTP connection to:
login.yahoo.co.jp:443
!!!MAY NOT BE VERIFIED!!!
On your platform your OpenSSL implementation is broken.
There is no difference between the values of VERIFY_NONE and VERIFY_PEER.
This means that attempting to verify the security of SSL connections may not
work. This exposes you to man-in-the-middle exploits, snooping on the
contents of your connection and other dangers to the security of your data.
To disable this warning define the following constant at top-level in your
application:
I_KNOW_THAT_OPENSSL_VERIFY_PEER_EQUALS_VERIFY_NONE_IS_WRONG = nil
Traceback (most recent call last):
D:/TokyoLoader/make_cookie.rb:43:in `’: undefined method `value=’ for nil:
NilClass (NoMethodError)
c:\xxxx>
自己解決でき、無事に全データDL出来ました!!
これが原因かは分かりませんが、make_cookie.rbとyahoo_box_download.rbをダウンロードしなおしてIDとPSを設定しなおしたら出来ました!
IDとPSは前のときから合ってるので、この2ファイルのダウンロードの仕方に問題があったかもしれません。
以前は2ファイルのコードをコピー→メモ帳へ貼り付けて上記の名前で保存(拡張子を.txtではなく.rbに変更)していましたが、今回は各コード右下のviewというリンクを右クリックしてリンク先を保存をかけたら上手くいきました!!ファイルを直接ダウンロードするのとソースをメモ帳に貼り付けて保存するのとでは何かが違うのだと思います。
キャプチャー画像以降で躓いてる方は是非お試しあれ!
「し · 2018年12月3日 at 12:17」こちらに記載しているソースが途中で切れているようですので、
すべて公開していただきたいです。もし勘違いでしたらごめんなさい。
当方もHTTP 403でおそらく動画データが容量大きすぎてタイムアウトになってしまっています。
すみません、下記のエラーがでるということはRubyがきちんとインストールされていないということなんでしょうか?
>‘gem’ は、内部コマンドまたは外部コマンド、
>操作可能なプログラムまたはバッチ ファイルとして認識されていません。
Windows7のノートPCに、WITH DEVKITのRuby+Devkit 2.5.3-1 (x64) をインストールしました。
C:/yahoobox/make_cookie.rb:43:in `’: undefined method `value=’ for nil:NilClass (NoMethodError)
から一向に進みません、、、キャプチャは取得できるが、yahoo.yamlが取得できない状態です。
OSはWin10 Home
Rubyは2.5.3-1
です。
どなたかわかる方がいらっしゃったらお願いいたします。
lp6mさんのブログで挫折して、こちらの記事を参考にしてようやくDLできました。いくら感謝しても足りない思いです。
Windows10で、Rubyは2.5.5-1。コメント中にあった、Mechanizeのプルリクと、util.rbの修正を行ったところ無事最後までいけました。本当にありがとうございます。
ヤフーボックスをヘビーに利用されていたんですね。吸出し成功おめでとうございます!
はじめまして。
夏樹と申します。
非プログラマの初心者です。
皆様の投稿を参考に挑戦していますが、ひらがなを入力したあと、
下記のようなエラーが出てしまい先に進むことができません。
調べたところ、make_cookie.rbのvalueに問題がありそうなのですが
解決の糸口が見えません。
どのようにすれば「yahoo.yaml」のファイルを取得することができるか
ご教授いただけると助かります。
何卒よろしくお願いします。
enter captcha:ふのよちかともむ
i got captcha�ӂ̂悿���Ƃ��
!!!SECURITY WARNING!!!
The SSL HTTP connection to:
login.yahoo.co.jp:443
!!!MAY NOT BE VERIFIED!!!
On your platform your OpenSSL implementation is broken.
There is no difference between the values of VERIFY_NONE and VERIFY_PEER.
This means that attempting to verify the security of SSL connections may not
work. This exposes you to man-in-the-middle exploits, snooping on the
contents of your connection and other dangers to the security of your data.
To disable this warning define the following constant at top-level in your
application:
I_KNOW_THAT_OPENSSL_VERIFY_PEER_EQUALS_VERIFY_NONE_IS_WRONG = nil
Traceback (most recent call last):
C:/yahoobox/make_cookie.rb:43:in `’: undefined method `value=’ for nil:Nil
Class (NoMethodError)
make_cookie.rbを実行すると以下のERRORになります。。。
何が原因なのでしょうか?
たすけてください。。。
Traceback (most recent call last):
3: from C:/yahoobox/make_cookie.rb:31:in ‘
2: from C:/Ruby26-x64/lib/ruby/2.6.0/open-uri.rb:37:inopen’
1: from C:/Ruby26-x64/lib/ruby/2.6.0/open-uri.rb:37:in open’
C:/Ruby26-x64/lib/ruby/2.6.0/open-uri.rb:37:ininitialize’: No such file or directory @ rb_sysopen – (Errno::ENOENT)
すみません。私も同じなのですが、どなたか見識ある方教えていただければ幸いです。
C:/Ruby24-x64/lib/ruby/2.4.0/open-uri.rb:37:in initialize’: No such file or directory @ rb_sysopen – (Errno::ENOENT)
from C:/Ruby24-x64/lib/ruby/2.4.0/open-uri.rb:37:inopen’
from C:/Ruby24-x64/lib/ruby/2.4.0/open-uri.rb:37:in open’
from C:/yahoobox/make_cookie.rb:29:in‘
すみません、自分も同じところでERRORになります。何かが変わってしまったんでしょうか。
Traceback (most recent call last):
3: from make_cookie.rb:29:in ‘
2: from C:/Ruby25/lib/ruby/2.5.0/open-uri.rb:37:inopen’
1: from C:/Ruby25/lib/ruby/2.5.0/open-uri.rb:37:in open’
C:/Ruby25/lib/ruby/2.5.0/open-uri.rb:37:ininitialize’: No such file or directory @ rb_sysopen – (Errno::ENOENT)
[…] 12. 【雑務】Yahoo Boxにあるデータを一括ダウンロードする方法 […]