HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0521
Mari0914hspinetを使ったPOST送信について2解決


Mari0914

リンク

2018/5/21(Mon) 01:53:04|NO.84463

こんにちは!HSPのPOST送信を使って、はてなブログやLivedoorブログなどのAtompubを操作したいと思っています。
はてなブログ:http://developer.hatena.ne.jp/ja/documents/blog/apis/atom

やりたいこととしては、ブログの投稿をしたいと思っています。
試行錯誤はしたのですが、BadRequestとなってレスポンスが返ってきます。(投稿もされていません)
ほかの言語は扱えず、HSPのみ扱えるのでなるべくHSPで再現したいです。

かなり寝ぼけて作ったソースコードで、突っ込みどころ満載ですが一応現在のソースコードです。
#include "hspinet.as"
sdim res,4096 sdim header,4096 sdim utf8msg,4096 sdim encmsg,4096 cls netinit if stat : dialog "ネット接続できません。" : end user = "(ユーザー名)" pass = "(APIキー)" header="<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" header+="<entry xmlns=\"http://www.w3.org/2005/Atom\"\n" header+=" xmlns:app=\"http://www.w3.org/2007/app\">\n" header+=" <title>(記事タイトル)</title>\n" header+=" <author><name>name</name></author>\n" header+=" <content type=\"text/plain\">\n" header+=" ** (投稿内容)\n" header+=" </content>\n" header+=" <updated>2008-01-01T00:00:00</updated>\n" header+=" <category term=\"Scala\" />\n" header+=" <app:control>\n" header+=" <app:draft>no</app:draft>\n" header+=" </app:control>\n" header+="</entry>\n" header+="\n" srcstr = user+":"+pass b64encode res, srcstr netheader "Authorization: Basic "+res+"\n" nkfcnv utf8msg,header,"Sw" ; utf-8に変換する neturl "(https://blog.hatena.ne.jp/{はてなID}/{ブログID}/atom/entry)" netrequest_post "", encmsg mes "投稿を送信しました。" *main ; 結果待ちのためのループ netexec res if res > 0 : goto *comp if res < 0 : goto *bad await 50 goto *main *bad ; エラー neterror estr mes "ERROR "+estr stop *comp ; 完了 mes "完了" netgetv buf jsonopen jroot,buf jsongets erstr, "error" if stat=0 : dialog "サーバーがエラーを返しました\n"+erstr jsonclose mesbox buf,640,300,1 stop
HSP 3.5を使用しています。
回答のほうよろしくお願いします!



この記事に返信する


Velgail

リンク

2018/5/21(Mon) 19:19:08|NO.84464

ざっと読んで、(はてな持ってないんで動作検証不能だし)書き換えてみたが…… 動くかな?

#include "hspinet.as" sdim res,4096 sdim header,4096 sdim utf8msg,4096 sdim encmsg,4096 cls netinit if stat : dialog "ネット接続できません。" : end user = "(ユーザー名)" pass = "(APIキー)" header="<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" header+="<entry xmlns=\"http://www.w3.org/2005/Atom\"\n" header+=" xmlns:app=\"http://www.w3.org/2007/app\">\n" header+=" <title>(記事タイトル)</title>\n" header+=" <author><name>name</name></author>\n" header+=" <content type=\"text/plain\">\n" header+=" ** (投稿内容)\n" header+=" </content>\n" header+=" <updated>2008-01-01T00:00:00</updated>\n" header+=" <category term=\"Scala\" />\n" header+=" <app:control>\n" header+=" <app:draft>no</app:draft>\n" header+=" </app:control>\n" header+="</entry>\n" header+="\n" // srcstr = user+":"+pass // b64encode res, srcstr // netheader "Authorization: Basic "+res+"\n" nkfcnv utf8msg,header,"Sw" ; utf-8に変換する neturl strf("https://%s:%s@blog.hatena.ne.jp/{はてなID}/{ブログID}/atom/entry",user,pass) netrequest_post "", utf8msg *main ; 結果待ちのためのループ netexec res if res > 0 : goto *comp if res < 0 : goto *bad await 50 goto *main *bad ; エラー neterror estr mes "ERROR "+estr stop *comp ; 完了 mes "投稿を送信しました。" netgetv buf jsonopen jroot,buf jsongets erstr, "error" if stat=0 : dialog "サーバーがエラーを返しました\n"+erstr jsonclose mesbox buf,640,300,1 stop



Mari0914

リンク

2018/5/22(Tue) 23:33:02|NO.84480

返信ありがとうございます!UTF-8に変換しないといけなかったのですね。
動作するのを確認しました!
ありがとうございます!



ONION software Copyright 1997-2021(c) All rights reserved.