Landscape トップページ | < 前の日 2004-02-20 2004-02-21 次の日 2004-02-22 >


* みかんチェックお願いしまーす

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [メモ]

とりせん田沼店でみかんを一箱買った。いわゆる大人買い。静岡産の青島みかん1980円なり。レジで支払いを済ませると、レジ係のお姉さんはマイクを取り出しこう言った。「1番レジ、みかんチェックお願いしまーす。」

え? みかんチェック? それってなに? と思って待ってると、胸にチーフの名札を付けたお兄さんが登場。みかん箱を検査台(?)に持っていくと、箱を開けてみかんを一つずつ調べ始めた。なるほど、傷んでいたりカビていたりするみかんを選り分けてくれるサービスなんだね。「どうしても輸送中に傷がついたり、傷んだりしてしまうんです。だからチェックしてからお持ち帰り頂くんですよ。」とのこと。一個だけ傷んでカビたみかんがあったが交換してもらえた。

帰り道でみかんを食べた。豊かな甘みとすっきりした酸味があって美味しいみかんだった。

* api.my.yahoo.com に weblogUpdates.ping すると Wrong content-type エラー

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [RSS] [Ruby]

昨日 2004-02-20 に、api.my.yahoo.com へ更新通知する方法を書いたが、ruby 1.8.1 の XMLRPC 1.2で weblogUpdates.ping を送るとエラーになってしまった。
$ script/update_ping.rb http://api.my.yahoo.com/RPC2
/usr/local/lib/ruby/1.8/xmlrpc/client.rb:543:in `do_rpc': Wrong content-type (RuntimeError)
from /usr/local/lib/ruby/1.8/xmlrpc/client.rb:409:in `call2'
from /usr/local/lib/ruby/1.8/xmlrpc/client.rb:399:in `call'
from script/update_ping.rb:18
update_ping.rb は 2004-02-15 に作ったスクリプト。

何が悪いのかを調べるため、ソースを追いかけてみることにした。/usr/local/lib/ruby/1.8/xmlrpc/client.rb を開く。攻殻機動隊の素子風に言うと「ソースにダイブする」かな。

do_rpc メソッド。538行目付近に例外の発生源があった。
ct = parse_content_type(resp["Content-Type"]).first
if ct != "text/xml"
  if ct == "text/html"
    raise "Wrong content-type: \n#{data}"
  else
    raise "Wrong content-type"
  end
end
resp というのはレスポンスだな。Content-Type レスポンスヘッダの値が text/xml じゃないと例外を発生させてるわけだ。api.my.yahoo.com はどんな Content-Type を返してきてるんだろう? ct を puts で出力させてみる。
text/plain
text/plain か。http://api.my.yahoo.com/rss/ping?u=http://sonic64.com/ を叩いたときと同じだな。

- どう修正しよう?

これって api.my.yahoo.com が悪いのかな。それとも、ruby の XMLRPC が厳格過ぎるのかな。この Content-Type をチェックしている if 文を無効にしてしまえばエラーを回避することはできるが、別のところで破綻しそうな気がする。とりあえず api.my.yahoo.com への更新通知は http://api.my.yahoo.com/rss/ping?u=http://sonic64.com/ に HTTP GET する方法を取ることにしよう。 代替手段もあることだし、XMLRPC のレスポンスは xml じゃないとダメなのか、などの深追いはしないことにする。

追記。その後、例外を rescue してエラーメッセージを標準エラー出力に出力するようにした。これならスクリプトの実行は継続され、weblogUpdates.ping はとりあえず成功するし。というわけでスクリプトは以下のようになった。

#!/usr/bin/env ruby
require 'xmlrpc/client'
require 'uri'

name = "Landscape - エンジニアのメモ"
url  = "http://sonic64.com/"

ping_uri = ARGV.shift
uri = URI.parse(ping_uri)
connection = XMLRPC::Client.new(uri.host, uri.path, uri.port)

result = nil
begin
  result =  connection.call("weblogUpdates.ping", name, url)
  puts "message: " + uri.host + ": " + result["message"]
rescue Exception => e
  puts Time::now.to_s + ' error: ' + ping_uri + ": " + e.message.split("\n")[0];
  puts Time::now.to_s + ' ' + ping_uri + ': weblogUpdates.ping: error'
  exit 1
end

- 余談

今回の記事のタイトルはじつに長くて読みづらい。日本語が7文字しかない。これ以上削れないと思って、「RSS: Ruby: api.my.yahoo.com に weblogUpdates.ping すると Wrong content-type エラー」という長いタイトルにしたんだけど、今考えると Wrong content-type は削ろうと思えば削れるかなあ。「RSS: Ruby: api.my.yahoo.com に weblogUpdates.ping するとエラー」だけでも良かったかも。
すべての記事の見出し (全1029件)
全カテゴリの一覧と記事の数
カテゴリごとに記事をまとめ読みできます。記事の表題だけを見たい場合は、すべての記事の見出し (カテゴリ別表示) へ。

直近30日分の記事
2007-04-23 (Mon)
2007-03-07 (Wed)
2007-02-27 (Tue)
2007-01-17 (Wed)
2007-01-15 (Mon)
2007-01-14 (Sun)
2007-01-08 (Mon)
2006-12-01 (Fri)
2006-11-22 (Wed)
2006-11-20 (Mon)
2006-11-19 (Sun)
2006-09-30 (Sat)
2006-08-29 (Tue)
2006-08-04 (Fri)
2006-07-27 (Thu)
2006-07-23 (Sun)
2006-07-17 (Mon)
2006-07-10 (Mon)
2006-07-06 (Thu)
2006-07-03 (Mon)
2006-06-29 (Thu)
2006-06-28 (Wed)
2006-06-27 (Tue)
2006-06-25 (Sun)
2006-06-19 (Mon)
2006-06-18 (Sun)
2006-06-15 (Thu)
2006-06-11 (Sun)
2006-06-01 (Thu)
2006-05-30 (Tue)
プロファイル
斎藤 宏明。エンジニアです。宇都宮市に住んでいます。
リンク
RSS
スポンサードリンク
Powered by
さくらインターネット

© 斎藤 宏明 Saito Hiroaki Gmail Address
Landscape - エンジニアのメモ http://sonic64.com/
Landscape はランドスケープと読みます。
ひらがなだと らんどすけーぷ です。