tdiary / tdiary-contrib

tDiaryの非正規リポジトリ。どなたでもcommit可能です。commit権希望の方、まずはパッチ等をpull requestして下さい。
https://tdiary.org/
68 stars 46 forks source link

flickr.rb: failed to get photo. #84

Closed miwarin closed 10 years ago

miwarin commented 10 years ago

すいません。分からないので質問なんですがここで質問してもよいでしょうか orz

現象

flickr.rb でエラーになる。

[ERROR] flickr.rb: failed to get photo.

6 月下旬ころから起きるように成ったので flickr API 変更の影響だと思ってますが、追いきれません。

Flickr API Going SSL-Only on June 27th, 2014 | code.flickr.com

環境

tdiary-contrib は先ほど更新した。

flickr API key はとくに設定していないので flickr.rb のものが使われている。はず

やったこと

以下のような画像にたいして

https://www.flickr.com/photos/miwarin/14418151018/

以下のように呼び出した( wiki 書式 )

{{flickr 14418151018, 'medium'}}

ためしたこと

flickr_photo_info の例外キャッチの処理をコメントにして OpenSSL のエラーを確認。

SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError)

手元に SSL 証明書がなかったので、有名な(?) http://curl.haxx.se/ca/cacert.pem を OpenSSL::X509::DEFAULT_CERT_FILE の場所へ設置した。これで SSL_connect の現象は無くなった。

次。

以下のエラーが起きるように成った。

undefined method `text' for nil:NilClass (NoMethodError)

(plugin/flickr.rb):76:in `block in flickr_photo_info'
(plugin/flickr.rb):115:in `block in flickr_open'
/usr/pkg/lib/ruby/1.9.3/open-uri.rb:35:in `open'
/usr/pkg/lib/ruby/1.9.3/open-uri.rb:35:in `open'
(plugin/flickr.rb):115:in `flickr_open'
(plugin/flickr.rb):74:in `flickr_photo_info'
(plugin/flickr.rb):43:in `flickr'
(TDiary::Plugin#eval_src):24:in `block in eval_src'
/home/rin/public_html/diary/tdiary/plugin.rb:99:in `eval'
/home/rin/public_html/diary/tdiary/plugin.rb:99:in `block in eval_src'
/home/rin/public_html/diary/tdiary/core_ext.rb:112:in `block in safe'
/home/rin/public_html/diary/tdiary/core_ext.rb:106:in `call'
/home/rin/public_html/diary/tdiary/core_ext.rb:106:in `safe'
/home/rin/public_html/diary/tdiary/plugin.rb:98:in `eval_src'
/home/rin/public_html/diary/tdiary/base.rb:66:in `do_eval_rhtml'
/home/rin/public_html/diary/tdiary/admin.rb:98:in `eval_rhtml'
/home/rin/public_html/diary/tdiary/dispatcher/update_main.rb:31:in `run'
/home/rin/public_html/diary/tdiary/dispatcher/update_main.rb:6:in `run'
/home/rin/public_html/diary/tdiary/dispatcher.rb:26:in `dispatch_cgi'
/home/rin/public_html/diary/update.rb:32:in `<main>'

キャッシュが作成されていることは確認。

% /bin/ls -l ~/diary/cache/flickr/14418151018*
-rw-r--r--  1 www  users  0 Jul 11 23:46 diary/cache/flickr/14418151018.flickr.photos.getInfo

サイズが 0 バイトだけど他の flickr.photos.getInfo も 0 バイトなので正常か。

キャッシュは作成されているけど、flickr から画像の情報が取得できていないのか?

何か設定が不足していると思うんですが何か分かるでしょうか?

minimum2scp commented 10 years ago

OS: Debian sid, Ruby 2.1.2, tdiary 4.0.4, tdiary-contrib は git の master の最新 (12da576) という環境で 確認してみたところ、正常に動作してキャッシュは0バイトではありませんでした。

% ls -lh data/cache/flickr/
合計 8.0K
-rw-r--r-- 1 www-data www-data 1.1K  7月 12 04:33 14418151018.flickr.photos.getInfo
-rw-r--r-- 1 www-data www-data 2.2K  7月 12 04:33 14418151018.flickr.photos.getSizes

少々特殊ですが、ca-certificates パッケージ (SSLルート証明書がインストールされる パッケージです)を故意にアンインストールして確認すると、報告されているような 状態になって [ERROR] flickr.rb: failed to get photo. というエラーを再現することはできました。

ですので、おそらく、

ということが起きているのかな、と推測します。 (https://github.com/tdiary/tdiary-contrib/blob/v4.0.4/plugin/flickr.rb#L99)

一度キャッシュこみでバックアップをとった上で、キャッシュを削除すると良いかも知れません。 (「設定」→「その他」に「flickrプラグイン」があって、そこからキャッシュ削除が行えます)

報告されている件とはちょっと別ですが、日記の編集画面で "get flickr photos" ボタンが 動いていないのを発見しました。 flickr.js が http://api.flickr.com を叩くようになっていたので、これは https に修正しないといけないですね… https://github.com/tdiary/tdiary-contrib/blob/v4.0.4/js/flickr.js#L57