xmlrpclib.Fault: Fault 220: “Error:” is not allow file type : .”への対処法

プログラムプログラミング
スポンサーリンク

pythonを使って、投稿用の画像をアップロードをサボろうと、いや、自動化しようとしてみましたところ、定番のエラーが発生しましたので解決方法をここに記します。ぽちぽち作業って案外めんどくさいから自動化って大事ですよねー。

スポンサーリンク

pythonで画像をアップロード:XML-RPC

プログラム

pythonで画像をアップロードするにはXML-RPCを使います。

コードを載せるのはなんか気恥ずかしいですが、以下の感じ。

#xmlrpcをインポート
import xmlrpc.client#画像データを作成
img_data = {
‘name’:’filename.jpg’, #ファイル名
‘type’:’image/jpeg’, #画像種類
‘bits’: imgfile #アップロードする画像ファイルの実体
}

#アップロードするサーバー情報
DOMAIN = “input domain url”
BLOG_ID = “input blog ID”
USERNAME = “input user name”
PASSWORD = “input password”

#いざアップロード
proxy = xmlrpc.client.ServerProxy(DOMAIN)
proxy.metaWeblog.newMediaObject(BLOG_ID, USERNAME, PASSWORD, img_data)

だがエラー!Fault 220

xmlrpclib.Fault: <Fault 220: “Error:” is not allow file type : .”>

こんなエラーが出力されました。何でしょう…ネットで調べてもこのエラーは載ってないし…

読んでみるとファイルタイプ「.」に「’’」は許されてません的な?でもファイル名にそんな文字使ってないし、ファイルの中身の話かしらん…

原因は画像ファイルがBase64でエンコードされてなかったから

空ファイルをアップロードしてみたら、空ファイルがアップロードできてたので、どうやらファイルの中身が悪いみたい。んで調査を進めていくと…どうやらアップロードしているファイルの送信に問題があるみたいで、アップロードできる形式にエンコードする必要がありました。その名もBase64。

Base64とはバイナリデータをテキストに変換してくれるやつで、生データでなくASCII文字列になるみたい。つまりはバイナリをアップロードしようとした時、中に「’」的な物が入っていて怒られていたのかしら。

修正コード

#xmlrpcをインポート
import xmlrpc.client
import base64#画像データを作成
img_data = {
‘name’:’filename.jpg’, #ファイル名
‘type’:’image/jpeg’, #画像種類
‘bits’: base64.b64encode(imgfile) #アップロードする画像ファイルをBase64でエンコード
}

#アップロードするサーバー情報
DOMAIN = “input domain url”
BLOG_ID = “input blog ID”
USERNAME = “input user name”
PASSWORD = “input password”

#いざアップロード
proxy = xmlrpc.client.ServerProxy(DOMAIN)
proxy.metaWeblog.newMediaObject(BLOG_ID, USERNAME, PASSWORD, img_data)

まとめ

色々と組んでみると、いちいち新しいエラーが発生してくれます。それをクリアしていくことでやれることが増えていくので、プログラミングって楽しいですね!

コメント

タイトルとURLをコピーしました