xml_rpc じゃなくてAtom APIとかの仕様なので、WSSE認証の作成というのをしなければならないようです。
いろいろ調べてみていろんな方のサイトやPHPなんかのプログラムも参考にしてAtomで投稿できるようになりました
LiveDoorPostはFunctionでリターンをするのですが、これはなんにも返しません??
投稿できればいいや。。。
Public Function AtomXML(ByVal Title As String, ByVal Body As String)
Dim XMLString As String
XMLString = "<?xml version=""1.0"" encoding=""UTF-8""?>"
XMLString &= "<entry xmlns=""http://purl.org/atom/ns#"" xmlns:dc=""http://purl.org/dc/elements/1.1/"">"
XMLString &= "<title>" & Title & "</title>"
'XMLString &= "<dc:subject>test</dc:subject>"
XMLString &= "<content type=""text/html"" mode=""escaped"">"
XMLString &= "<![CDATA[" & Body & "]]>"
XMLString &= "</content>"
XMLString &= "</entry>"
Function LiveDoorPost(ByVal username As String, ByVal password As String, ByVal BlogID As String, ByVal XMLString As String) As String
Dim postDataBytes As Byte() = System.Text.Encoding.UTF8.GetBytes(XMLString)
Dim URL As String = "http://cms.blog.livedoor.com/atom/blog_id=" & BlogID
'HttpWebRequestの作成
Dim webreq As System.Net.HttpWebRequest = _
CType(System.Net.WebRequest.Create(URL), System.Net.HttpWebRequest)
webreq.Method = "POST" 'GET指定
webreq.UserAgent = "Blogposter" 'UA設定(ソフト名)
webreq.ContentType = "text/xml"
webreq.ContentLength = postDataBytes.Length
'WSSE認証の作成
Dim shasp As New System.Security.Cryptography.SHA1CryptoServiceProvider() 'SHA処理用
Dim nowt As DateTime = DateTime.Now '現在の時間取得
Dim tim As String = nowt.ToString("yyyy-MM-ddTHH:mm:ssZ") '文字列にする(2005-12-11T22:39:56Z)の形式
Dim non As String = "tekitounisitemiruyon" 'Nonce(WSSEに必須の20文字の文字列)
Dim b64 As String = System.Convert.ToBase64String(shasp.ComputeHash(System.Text.Encoding.UTF8.GetBytes(non & tim & password))) 'NonceTimePasswordをSHA→Base64エンコード
Dim ninsyou As String = "UsernameToken Username=""" & username & """, PasswordDigest=""" & b64 & """, Nonce=""" & System.Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(non)) & """, Created=""" & tim & """" '認証文の完成
webreq.Headers.Add("X-WSSE", ninsyou) 'HTTP接続に付ける
Dim reqStream As System.IO.Stream = webreq.GetRequestStream()
reqStream.Write(postDataBytes, 0, postDataBytes.Length)
reqStream.Close()
Dim response As System.Net.HttpWebResponse = Nothing
Dim doc As New System.Xml.XmlDocument()
'レスポンスの取得
Try
response = CType(webreq.GetResponse(), System.Net.HttpWebResponse)
Dim strm As System.IO.Stream = response.GetResponseStream()
'XmlDocumant に読み込む
doc.Load(strm)
Catch ex As Exception
Finally
If Not (response Is Nothing) Then
response.Close()
End If
End Try
'結果を得る
'doc.Value
Dim FileName As String = Application.StartupPath() & "\Tools\Livedoorxml.txt"
doc.Save(FileName)
'Try
'Return paramsNode.SelectSingleNode("int").InnerText
'Catch ex As Exception
Return ""
'End Try
こんな感じでこの関数は使います
LiveDoorPost(username, password,BlogID ,AtomXML(Title,Body))


