しかし正式に対応しているわけではないらしく、仕様などについての情報がかなり少なめです。
Atom Pub APIについて
http://help.blogpark.jp/archives/52288925.html
これだけなんです。
ググって他のブログなどを参考にしつつ、VB.NETでなんとか投稿できるようになりました。そのコードが以下です。
Dim wc As New WebClient Dim wc2 As New WebClient Dim stream As Stream Dim sr As StreamReader Dim enc As Encoding = Encoding.UTF8 Dim username As String = "abc" Dim password As String = "1234" Dim upurl As String = "http://livedoor.blogcms.jp/atom/blog/abc/article" Dim nonce As Byte() = makeRandamBytes(40) Dim created As String = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ssZ") Dim bytemain As New List(Of Byte) bytemain.AddRange(wNonce) bytemain.AddRange(System.Text.Encoding.UTF8.GetBytes(created)) bytemain.AddRange(System.Text.Encoding.UTF8.GetBytes(password)) Dim sha1 As New SHA1Managed() Dim passwordDigest As Byte() passwordDigest = wSha1.ComputeHash(bytemain.ToArray()) Dim format As String = "UsernameToken Username=""{0}"", PasswordDigest=""{1}"", Nonce=""{2}"", Created=""{3}""" Dim wsseHeader As String = String.Format(format, username, Convert.ToBase64String(passwordDigest), Convert.ToBase64String(nonce), created) wc.Headers.Add("X-WSSE", wsseHeader) stream = wc.OpenRead("http://livedoor.blogcms.jp/atom/") sr = New StreamReader(stream, enc) literal1.Text = wSr.ReadToEnd() Dim uploadXml As String = "<?xml version=""1.0"" encoding=""utf-8"" ?>" & vbNewLine _ & "<entry xmlns=""http://www.w3.org/2005/Atom""" & vbNewLine _ & " xmlns:app=""http://www.w3.org/2007/app""" & vbNewLine _ & " xmlns:blogcms=""http://blogcms.jp/-/spec/atompub/1.0/"">" & vbNewLine _ & " <title>テスト</title>" & vbNewLine _ & " <updated>" & created & "</updated>" & vbNewLine _ & " <published>" & created & "</published>" & vbNewLine _ & " <author><name>abc</name></author>" & vbNewLine _ & " <blogcms:source>" & vbNewLine _ & " <blogcms:body><![CDATA[<p>ボディ</p >]]></blogcms:body>" & vbNewLine _ & " <blogcms:more><![CDATA[<p>更に読むの内容 </p>]]></blogcms:more>" & vbNewLine _ & " </blogcms:source>" & vbNewLine _ & " <app:control>" & vbNewLine _ & " <app:draft>yes</app:draft>" & vbNewLine _ & " </app:control>" & vbNewLine _ & "</entry>" Dim uploadBytes As Byte() = System.Text.Encoding.UTF8.GetBytes(uploadXml) wc.Headers.Add("X-WSSE", wWsseHeader) Dim retUp As Byte() = wWc.UploadData(upurl, "POST", uploadBytes) literal1.Text = System.Text.Encoding.UTF8.GetString(retUp)
makeRandamBytesで40文字の乱数を作成しています。
XMLが微妙に違っていたりするとダメだったりするみたいです。
インデントしたら大丈夫になったり?とかなんだかいろいろやってたので違うかもしれないですが、とにかく苦労しました。
あと、画像のアップロードがさらに大変だったのですが、、次の記事で。。
0 件のコメント:
コメントを投稿