2008今じゃほとんどTumblrは使ってないんだけど、なんとなく画像を取得するスクリプトを書いてみた。touchに放り込んでみようかなとか思ったのよ。}}ちなみにXPathはどんなものかなんとなくは知っていたけれど使うのは初めて。APIを使って50件ずつ画像のURLを取得して、1個ずつカレントディレクトリにコピーすると言う至極単純な方法を選んだ。人によっては1000単位で画像があるだろうから(ちなみにオレは1000ちょいだった)かなり時間がかかると思う。1つよくわからない現象が起きていて、とある画像を取得するタイミングで必ずエラーが発生する。どの画像かまでは調べてないけど、いつも同じ画像なのは確か。tumblr_getimages.rb:10とりあえず、openで取得したtempfileとtempfile#pathをpで表示してみた。以下がその問題が起きる部分。StringIO・・・?#“/var/folders/ni/niHXwO9-GoO0yPJpz3WMm++++TI/-Tmp-/open-uri.1153.4”#“/var/folders/ni/niHXwO9-GoO0yPJpz3WMm++++TI/-Tmp-/open-uri.1153.5”#nil無理矢理な対処としてはコピーの処理の時にオブジェクトのクラスを調べて、StringIOを回避すればとりあえずは何とかなる。そのかわり、その画像はローカルに保存されないけれど。tempfile.kind_of?(Tempfile)ちなみに1000件も取得するのが途中で面倒になってしまったので最後まで取得できるかまでは試してない。一応100件ぐらいは取得できたけど。tumblrのIDとか取得の開始地点、1回で取得する件数とかそのまま直書きしちゃってるけど、コマンドラインの引数で与えるようにすればそれなりに使い勝手がよくなるかもしれない。本当はページ番号と1ページごとの件数を与えれば、そのページの画像を取得するようにするつもりだったんだけどね。他にもテキストとかがたんぶらってあったりすると画像の数が不確定で、そこらへんどううまく処理するかとか考えると結構時間かかりそうだったからやめた。6:13エラーが発生する画像を特定した。http://data.tumblr.com/14065003_500.jpgパっと見、普通の画像なんだけどな。試しにirbから取得してみる。10:25ちょっとググってみたらruby-listの過去ログが引っかかった。上のリンクはcgi.rbの話だけど、open-uriでもどうやら10kb未満の画像だとTempfileではなく、StringIOになる模様。ちなみに該当の画像は8kbでした。1:27コードを修正しました。