プログラムからはてなブログの投稿をやってみました。言語は思い付きでC#を選びました。
昨日なかば寝ながら書いていておかしなところがたくさんあったので修正しました。
C#のLINQ to XMLなるもの、嘘でした。単なる普通のDOMでした…を使って
はてなブログAtomPubで記事をテスト用ブログに投稿してみました。
C#なめてましたごめんなさい。
全然C#知らんがな僕。LINQ to XMLはXDocumentを使ってひたすらnewが並ぶやつでした。これです。
LINQ to XMLのほうが直感的に書けるけどなんだかヘンテコな感じですね。
MSDN LINQ to XMLとDOM
http://msdn.microsoft.com/ja-jp/library/bb387021.aspx
いろいろ罠があってハマりました。
まず、C#のXMLだけどLINQ to XMLのXDocumentとXmlDocumentがあって紛らわしい。
あと、XMLの名前空間どうすんの?どうやるの?とか、
WSSE認証で苦戦したり、401 Unauthorizedが返ってきたと思ったら、
パスワードだと思ってたら実はAPIキーというのを使うらしいし(詳細画面で確認できます)、よっしゃ認証通ったっぽい!!!
と思ったら今度はstringに格納したXMLのXML宣言がファイルにはいたときじゃないと出ない問題があったり、
それが解消したと思ったら400 Bad Requestが返ってきたり……。
原因はXML宣言を無理やり出そうとしてStringWriterを単純に使うとUTF-16になってしまうという罠。
まぁそんなわけで試行錯誤でパクリコードやらクソコードになり下がってますが、許してください。
なお、下記URLのおかげで無事記事を投稿できることができました。感謝です。
WSSE認証について
参考URL
2008-09-07
はてなのWSSE認証をC#で実装してみた - kanaharu.cpp
XmlDocumentからXML宣言付きの整形済みXMLをstringで取得する | 手帳.net
http://www.ipentec.com/document/document.aspx?page=csharp-namespace-xml-write-use-dom
拡張メソッド - C# によるプログラミング入門 | ++C++; // 未確認飛行 C
ソースコード
もう試行錯誤で書いた記録もそのまま残して晒します。ひどいコードです。
記事内容とか文字列を直に打って渡してるあたり手抜き感満載ですよね。
Linq to XMLを初めて使ったので異様に冗長な書き方になっているかもしれません。
まぁ、お試しコードだからいいよね!
次回の記事を書きました