|
|
2022/3/26(Sat) 11:41:29|NO.95846
TsubuyakiSoup(TwitterAPI)でDMを送信したいのですが、可能でしょうか?
画像付きのDMも方法があるのなら教えてほしいです。
|
|
2022/5/22(Sun) 19:37:23|NO.96410
|
|
2022/5/24(Tue) 17:50:04|NO.96436
まず、JSONをPOSTできるように"TsubuyakiSoup_mod_u8.hsp"を少し改造します。
1. 475行目を書き換え
if (api != "media/upload.json") {
↓
if (api != "media/upload.json" && api != "direct_messages/events/new.json") {
2. 509行目と510行目の間に、下記を挿入する
} else:if (api == "direct_messages/events/new.json") {
RequestHeader += "\r\nContent-Type: application/json"
後は、こんな感じでできました。
メッセージ内容に日本語などのマルチバイト文字を含めたい場合は、Unicodeエスケープシーケンスにしてください。
#include "hsp3utf.as"
#include "../TsubuyakiSoup_mod_u8.hsp"
#include "key.hsp"
#module
// p1 = メッセージ内容
// p2 = 送る先のユーザーのID (IDチェッカー https://idtwi.com/ などで確認可能)
// p3(省略可) = メディアID
#define global SendDM(%1, %2, %3="") _SendDM %1, %2, %3
#deffunc _SendDM str text, str recipient_user_id, str media_id
json = strf({"
{
"event": {
"type": "message_create",
"message_create": {
"target": {
"recipient_id": %s
},
"message_data": {
"text": "%s"
"}, recipient_user_id, text)
if (media_id != "") {
json += strf({"
,
"attachment": {
"type": "media",
"media": {
"id": %s
}
}
"}, media_id)
}
json += {"
}
}
}
}
"}
execRestApi "direct_messages/events/new.json", json, METHOD_POST
return stat
#global
// 初期化
exist "Token.txt"
if strsize < 0:dialog "先にSample01を実行しアクセストークンを取得してください":end
sdim tokenTxt,strsize+1
bload "Token.txt",tokenTxt
notesel tokenTxt
noteget ACCESS_TOKEN,1
noteget ACCESS_SECRET,2
noteunsel
tCupInit "test", CONSUMER_KEY, CONSUMER_SECRET, 10
setAccessToken ACCESS_TOKEN, ACCESS_SECRET
// DMを送信
sdim mediaid
imagename = "" // 画像のパス
if (imagename != "")
{
media_upload imagename, length(imagename), mediaid
}
//SendDM "Hello world", "送る先のユーザーのID", mediaid
// レスポンスを表示
response = "##### HEADER ######\n"+getResponseHeader()+"\n\n##### BODY #####\n"+getResponseBody()
mesbox response, 640, 480, 4
注意として、TwitterのDeveloper Portalのアプリの設定にある「User authentication settings」で「OAuth 1.0a」をオンにし、「OAUTH 1.0A SETTINGS」内の「App permissions」を「Read and write and Direct message」にして、「Access Token and Secret」をRegenerateしてから「Sample01-GetAccessToken.hsp」を再実行しておいてください。
| |
|
2022/5/24(Tue) 22:47:33|NO.96442
別のバージョンのTsubuyakiSoupを使用しているのですが…。
こんな感じで良いんですかね…?
https://twitter.com/smopu_M/status/1529095634632200192
↓以下のソースを実行してみましたが、ヘッダーもレスポンスも表示されてない状態です。
https://twitter.com/smopu_M/status/1529095843122655232
Pythonだったら成功してたのですが…。
#include "hsp3utf.as"
#include "user32.as"
#include "TsubuyakiSoup_mod_utf.hsp"
#module
// p1 = メッセージ内容
// p2 = 送る先のユーザーのID (IDチェッカー https://idtwi.com/ などで確認可能)
// p3(省略可) = メディアID
#define global SendDM(%1, %2, %3="") _SendDM %1, %2, %3
#deffunc _SendDM str text, str recipient_user_id, str media_id
json = strf({"
{
"event": {
"type": "message_create",
"message_create": {
"target": {
"recipient_id": %s
},
"message_data": {
"text": "%s"
"}, recipient_user_id, text)
if (media_id != "") {
json += strf({"
,
"attachment": {
"type": "media",
"media": {
"id": %s
}
}
"}, media_id)
}
json += {"
}
}
}
}
"}
execRestApi "direct_messages/events/new.json", json, METHOD_POST
return stat
#global
CONSUMER_KEY = ""
CONSUMER_SECRET = ""
ACCESS_TOKEN = ""
ACCESS_SECRET = ""
tCupInit "testClient", CONSUMER_KEY, CONSUMER_SECRET, 10
setAccessToken ACCESS_TOKEN, ACCESS_SECRET
SendDM "Hello world", "1497587485484150793"
// レスポンスを表示
response = "##### HEADER ######\n"+getResponseHeader()+"\n\n##### BODY #####\n"+getResponseBody()
mesbox response, 640, 480, 4
| |
|
2022/5/24(Tue) 23:27:56|NO.96443
|
|
2022/5/24(Tue) 23:45:46|NO.96445
tCup_mod_utf.hsp をいじる前にバックアップ取るの忘れてしまいました…
|
|
2022/5/25(Wed) 00:50:17|NO.96447
すみません、まず訂正を。改造するのは"TsubuyakiSoup_mod_u8.hsp"ではなく"tCup_mod_u8.hsp"でした。
ファイル名が違うとは思っていましたが、バージョンが違うんですね……。
バージョンが違うのではしょうがないのですが、NO.96442の https://twitter.com/smopu_M/status/1529095634632200192 のコードは間違っています。自分もあまり深くは理解できていないのですが、手順1は、リクエストのヘッダーに引数を追加させないためのもので、RequestURLは関係ないです。
NO.96444のエラー内容の感じからして、Twitter API v1.1に対応する前のTsubuyakiSoupを使っているのではないでしょうか?
自分は、最新のTsubuyakiSoupをinoviaさんがhsp3utfに対応されているバージョンを使っているので、こちらに切り替えてみてはいかがでしょうか?
https://github.com/inovia/TsubuyakiSoup_mod_u8
ちなみに、単純な疑問なのですがお持ちのTsubuyakiSoupはどこから入手したのでしょう?
GitHubのオリジナル・フォークのコミット履歴などを軽く調べてみましたが分かりませんでした。
|
|
2022/5/25(Wed) 16:28:59|NO.96452
動画付きDMを行うことは可能ですよね?
dm_videoに変えたら問題なくメッセージを送ることは可能でしょうか?
通常文字列をUnicodeエスケープシーケンスを変換するには、どうすればいいのでしょうか?
変換はいくらググっても見つかりませんでした。
|
|
2022/5/25(Wed) 20:42:17|NO.96453
すみません、また訂正です。NO.96436のコードの65行目にある if (imagename != "") の波括弧のスタイルが間違っていました。{ が新しい行にありますがif文と同じ行に移動させてください。
なるほど、動画付きアップロード対応のですか。
NO.96451のファイルですが、アクセス権限がないので見えないです……。Googleドライブだと思いますが、ファイル右クリックメニューの「リンクを取得」から、「制限付き」を「リンクを知っている全員」に変更すれば見えるようになると思います。
>TsubuyakiSoup_mod_u8.hsp の#func が InternetOpenA(Shift-JIS用) で、TsubuyakiSoup_mod_utf.hsp の #func が InternetOpenW (Unicode用)なので、こっちの方が安定しているのかもしれませんが…。
モジュール内で扱う文字コードが違うだけで、動作に影響はないはずです。
たしか、#funcでsptrやwptrと指定されている引数に渡した文字列は、勝手にその文字コードにエンコードされるので、そもそもUTF-8とかUTF-16に変換する必要自体なかったはず……。
>tCup_mod_utf.hsp のどこの部分を入れ替えたらいいのか教えていただければ幸いです。
NO.96443で頂いた"tCup_mod_utf.hsp"を改めて見てみたところ、すでに RequestHeader += "\r\nContent-Type: application/json の処理があったので、NO.96436の改造は要らないかもしれません。
TsubuyakiSoup_mod_utf.hspもtCup_mod_utf.hspも、TsubuyakiSoup_mod_u8(NO.96447参照)のものに丸々置き換えるのが一番良いと思うのですが、どうやらTsubuyakiSoup_mod_u8は動画のアップロードには対応していないみたいですね……。
それと、NO.96447で
「NO.96444のエラー内容の感じからして、Twitter API v1.1に対応する前のTsubuyakiSoupを使っているのではないでしょうか?」
と書きましたが、NO.96443のtCup_mod_utf.hspをざっと見た限り、すでにv1.1を使ってるっぽいです。なぜそのエラーが出たのか謎ですね……。
>動画付きDMを行うことは可能ですよね?
Twitter APIの仕様上は可能だと思いますが、TsubuyakiSoup_mod_u8では出来ないです。
>dm_videoに変えたら問題なくメッセージを送ることは可能でしょうか?
dm_videoとは何でしょう? TsubuyakiSoup_mod_utfにある命令でしょうか。
>通常文字列をUnicodeエスケープシーケンスを変換するには、どうすればいいのでしょうか?
こんな感じでできると思います。
作成に当たり、こちらのページを大いに参考にさせていただきました。
https://www.kwonline.org/memo2/2014/11/21/unicode-escape-sequence-%e5%a4%89%e6%8f%9b%e3%83%84%e3%83%bc%e3%83%ab/
#module convert_to_ues
#uselib "kernel32.dll"
#func lstrlenW "lstrlenW" int
#defcfunc ConvertToUnicodeEscapeSequence str p1
text_utf16=""
cnvstow text_utf16, p1
result=""
repeat lstrlenW(varptr(text_utf16))
code = wpeek(text_utf16, cnt * 2)
result += strf("\\u%04x", code)
loop
return result
#global
mes ConvertToUnicodeEscapeSequence("Hello World. こんにちは世界。")
■まとめ
とりあえず、お持ちのtCup_mod_utf.hspを改造せずに、NO.96442のコードをもう一度実行してみてください。
正常に動くのであれば解決、動かないのであればtCup_mod_utf.hspを改造するか、TsubuyakiSoup_mod_u8を画像アップロードに対応させて使いましょう。
| |
|
2022/5/25(Wed) 21:27:46|NO.96455
すいません、これでDLできると思います。
TsubuyakiSoup_mod_utf.hsp
https://drive.google.com/file/d/1-KyxWfKwCI6RmzCXZVScvrco6vSluAys/view
tCup_mod_utf.hsp
https://drive.google.com/file/d/1-VcQTvlGWySiQFDT9X_2xo8pFDOUigMv/view
↓こちらのスクリプトでは、問題なく動画ツイートできることを確認しました。
#include "hsp3utf.as"
#include "TsubuyakiSoup_mod_utf.hsp"
#include "key.hsp"
exist "Token.txt"
datasize = strsize
if datasize > 0{
sdim data,datasize+1
bload "Token.txt",data
} else {
dialog "先に key.hsp にCONSUMER_KEYとCONSUMER_SECRETを登録し、01_gettoken.hsp を実行してアクセストークンを取得してから実行してください。",1
end
}
notesel data
noteget ACCESS_TOKEN,1
noteget ACCESS_SECRET,2
tCupInit "testClient", CONSUMER_KEY, CONSUMER_SECRET, 10
setAccessToken ACCESS_TOKEN, ACCESS_SECRET
/*
media_upload 関数
p1 ファイル名(相対パス)や絶対パスの配列変数
p2 アップロードする画像ファイル数
p3 取得するメディアID(文字列)
*/
sdim videoname,256
videoname(0) = "filename.mp4"
video_upload videoname,mediaid
if stat ! 0 {
dialog "動画投稿失敗"+stat,1
}else{
Tweet "動画投稿テスト",,mediaid
if stat = 200{
dialog "ツイートに成功しました。"
}else{
dialog "ツイートに失敗しました。"+stat,1
}
mediaid = ""
}
objmode 0
response = "##### HEADER ######\n"+getResponseHeader()+"##### BODY #####\n"+getResponseBody()
mesbox response,640,480,4
stop
| |
|
2022/5/25(Wed) 23:20:39|NO.96459
ダウンロードはできましたが、"mbase64.as"と"jsonParse_utf.as"というファイルがないので実行できませんでした。
とりあえず、"mbase64.as"は https://hsp.moe/#mbase64 からダウンロードした"mbase64.hsp"をリネームし、"jsonParse_utf.as"はTsubuyakiSoup_mod_u8のjsonParse_u8.asをリネームして実行してみました。
NO.96455の動画付きツイートの動作確認はできたので、互換性はありそうです。
肝心のDM送信は……できませんでした(そのままでは)。
RequestHeader += "\r\nContent-Type: application/json があったのは、SMOPUさんの改造の跡でしたね。
なので、tCup_mod_utf.hspをNO.96436と同じように改造します。
1. 465行目を書き換え
if (methodType != METHOD_XMPOST) {
↓
if (methodType != METHOD_XMPOST && api != "direct_messages/events/new.json") {
2. 583行目と584行目の間に、下記を挿入する
} else:if (api == "direct_messages/events/new.json") {
RequestHeader += "\r\nContent-Type: application/json"
これでNO.96436のモジュールで、DMの送信ができるようになります。
動画を添付したい場合は、こうします。
第4引数に 1 を渡すとDM用にアップロードしてくれるみたいです。なぜか"video_upload"マクロには第4引数がないので、"video_upload_"命令本体を呼び出しています。
(前略)
sdim mediaid
video_upload_ "動画ファイル名", mediaid, , 1
SendDM "Hello World", "ユーザーID", mediaid
|
|
2022/5/26(Thu) 18:49:15|NO.96466
>第4引数に 1 を渡すとDM用にアップロードしてくれるみたいです。なぜか"video_upload"マクロには第4引数がないので、"video_upload_"命令本体を呼び出しています。
TwitterAPIリファレンスに、dm_videoを指定すると書いてあったので、4引数に1にしたら、DM用の動画にするようにしていましたが、
#define global video_upload(%1,%2,%3=0,%4=0) video_upload_ %1,%2,%3,%4
ここを変えるの忘れていました。
とりあえず、DMは成功しましたが、Unicodeエスケープシーケンス変換でサロゲートペアの文字が含まれていると「パラメーターの値が異常です」というエラーが出ます。なんとかならないですかねぇ…
あと、Twitterのダイレクトメッセージを取得する方法ってないのでしょうか。
#include "hsp3utf.as"
#include "TsubuyakiSoup_mod_utf.hsp"
#include "key.hsp"
#module
// p1 = メッセージ内容
// p2 = 送る先のuser_id (IDチェッカー http://tik.dignet.info/web/idname/ で確認可能)
// p3(省略可) = メディアID
#uselib "kernel32.dll"
#func lstrlenW "lstrlenW" int
#defcfunc ConvertToUnicodeEscapeSequence str p1
text_utf16=""
cnvstow text_utf16, p1
result=""
repeat lstrlenW(varptr(text_utf16))+8
code = wpeek(text_utf16, cnt * 2)
result += strf("\\u%04x", code)
loop
return result
#define global SendDM(%1, %2, %3="") _SendDM %1, %2, %3
#deffunc _SendDM str p1, str recipient_user_id, str media_id
text = ConvertToUnicodeEscapeSequence(p1)
json = strf({"
{
"event": {
"type": "message_create",
"message_create": {
"target": {
"recipient_id": %s
},
"message_data": {
"text": "%s"
"}, recipient_user_id, text)
if (media_id != "") {
json += strf({"
,
"attachment": {
"type": "media",
"media": {
"id": %s
}
}
"}, media_id)
}
json += {"
}
}
}
}
"}
execRestApi "direct_messages/events/new.json", json, METHOD_POST
return stat
#global
exist "Token.txt"
datasize = strsize
if datasize > 0{
sdim data,datasize+1
bload "Token.txt",data
} else {
dialog "先に key.hsp にCONSUMER_KEYとCONSUMER_SECRETを登録し、01_gettoken.hsp を実行してアクセストークンを取得してから実行してください。",1
end
}
notesel data
noteget ACCESS_TOKEN,1
noteget ACCESS_SECRET,2
tCupInit "testClient", CONSUMER_KEY, CONSUMER_SECRET, 10
setAccessToken ACCESS_TOKEN, ACCESS_SECRET
// DMを送信
sdim mediaid
imagename = "" // 動画のパス
if (imagename != ""){
video_upload imagename, mediaid, , 1
}
SendDM "メッセージ本文", "ここにuser_idを入力", mediaid
if stat = 200{
dialog "成功"
}else{
dialog "失敗"+stat,1
}
objmode 2
pos 0,0
_response = "##### HEADER ######\n"+getResponseHeader()+"\n##### BODY #####\n"+getResponseBody()
mesbox _response,640,480,4
stop
Unicodeエスケープシーケンス変換でエラーが出る系
#include "hsp3utf.as"
#module convert_to_ues
#uselib "kernel32.dll"
#func lstrlenW "lstrlenW" int
#defcfunc ConvertToUnicodeEscapeSequence str p1
text_utf16=""
cnvstow text_utf16, p1
result=""
repeat lstrlenW(varptr(text_utf16))
code = wpeek(text_utf16, cnt * 2)
result += strf("\\u%04x", code)
loop
return result
#global
tex = ConvertToUnicodeEscapeSequence("あいうえおかきくけこさしすせそたちつてと🤣🤣🤣💦🤔🤪✌️")
mesbox tex,640,480,4
| |
|
2022/5/26(Thu) 21:30:58|NO.96467
あと、ちなみにクイック返信もできるんですかね?
Pythonではやったことはあるのですが、HSPのTsubuyakiSoupの場合はこんな感じでいいのでしょうか?
quick_dm(0)="test"
quick_dm_desc(0)="test"
media_id = "2"
json = strf({"
{
"event": {
"type": "message_create",
"message_create": {
"target": {
"recipient_id": %s
},
"message_data": {
"text": "%s"
"}, recipient_user_id, text)
if (quick_dm(0) != ""){
json += strf({"
,
"quick_reply": {
"type": "options",
"options": [
{
"label": "%s",
"}, quick_dm(0))
if quick_dm_desc(0) != ""{
json += strf({"
"description": "%s"
"},quick_dm_desc)
}
if (quick_dm(0) != ""){
json += {"
}
]
}
"}
}
}
if (media_id != "") {
json += strf({"
,
"attachment": {
"type": "media",
"media": {
"id": %s
}
}
"}, media_id)
}
json += {"
}
}
}
}
"}
クイック返信は配列変数で例えば、
quickdm(0) = "クイック返信1"
description(0) = "説明欄A"
quickdm(1) = "クイック返信2"
description(1) = "説明欄B"
SendDM "Hello world", "",,quickdm,description
としたらクイック返信が表示されるようにしたいです。
https://okadak1990.hatenablog.com/entry/2019/01/22/161541
ここを見ながらやりました。
|
|
2022/5/26(Thu) 22:33:36|NO.96468
>Unicodeエスケープシーケンス変換でサロゲートペアの文字が含まれていると「パラメーターの値が異常です」というエラーが出ます。
おっとcnvstow命令は自動でバッファ確保してくれないんですね。
モジュール内のtext_utf16変数の初期化処理を、下記のように直せば解決すると思います。
text_utf16=""
↓
sdim text_utf16, strlen(p1) * 2 + 2
余談ですが、自分はコンパイル・実行にhspcというツールを使っているのですが、ある程度の日本語を含ませないとaオプションによるUTF-8自動判定が効かないみたいですね。
>Twitterのダイレクトメッセージを取得する方法ってないのでしょうか。
video_upload命令の改造ができるくらいTsubuyakiSoupを理解してTwitterのドキュメントも読めるのであれば、もう少しご自分で調べればできそうですが……。
とりあえずまあこんな感じでできます。結果はツイート取得時と同じようにjsonで返ってきます。
#module
#include "hsp3utf.as"
#include "TsubuyakiSoup_mod_utf.hsp"
#include "key.hsp"
#module
// p1(省略可) = 取得する数
#deffunc GetDM int count
argument=""
if (count != 0) : argument(0) = "count=" + str(count)
execRestApi "direct_messages/events/list.json", argument, METHOD_GET
return stat
#global
// 初期化処理(省略)
GetDM
json = getResponseBody()
mesbox json, 640, 480, 4
>クイック返信
機能自体いまいちピンときていないのですが、Twitterのドキュメントを見る限り、NO.96436のSendDMモジュールのJSONを書き換えれば可能だと思います(もう知ってらっしゃるとは思いますが)。
少し疲れたので細かい返信は明日にさせてください。
とりあえずご自身で試行錯誤してみて、それでも解決出来ない場合は "どこ/なにが分からないのか" をしっかり明記して再度質問してください。
| |
|
2022/5/27(Fri) 18:01:45|NO.96476
SendDM関数に第4引数でクイック返信を追加できるようにしてほしいです。第5引数にdescriptionの追加とか
どうしてもjsonの記述が悪く、うまくいきません。
どこを修正すればいいのでしょうか?
quick_dm="test","next"
quick_dm_desc="test","next"
media_id = ""
json = strf({"
{
"event": {
"type": "message_create",
"message_create": {
"target": {
"recipient_id": %s
},
"message_data": {
"text": "%s"
"}, recipient_user_id, text)
if (quick_dm(0) != ""){
json += {"
,
"quick_reply": {
"type": "options",
"options": [
{
"}
repeat length(quick_dm)
json += strf("{\n\"label\": \"%s\",\n",quick_dm(cnt))
if quick_dm_desc(cnt) != ""{
json += strf({"
"description": "%s"
"},quick_dm_desc(cnt))
}
json += "}"
if cnt>length(quick_dm):json += ","
loop
if (quick_dm(0) != ""){
json += {"
}
]
}
"}
}
}
if (media_id != "") {
json += strf({"
,
"attachment": {
"type": "media",
"media": {
"id": %s
}
}
"}, media_id)
}
json += {"
}
}
}
}
"}
mesbox json,640,480,4
mesboxで確認してみたところ、jsonの記述がおかしくなっています。
|
|
2022/5/27(Fri) 19:56:04|NO.96477
まず訂正です。NO.96468のDM取得のコードの先頭行にある"#module"はただのミスなので消してください。
クイック返信とは、受信者が選択して返信できる定型文のことを言うんですね。
https://business.twitter.com/ja/help/campaign-editing-and-optimization/quick-replies.html
>どこを修正すればいいのでしょうか?
コードのインデントが大変なことになってるのは置いといて……
まずは、できたJSONをVSCodeなどでフォーマットして見やすくしてみましょう。
{
"event": {
"type": "message_create",
"message_create": {
"target": {
"recipient_id": 0
},
"message_data": {
"text": "0",
"quick_reply": {
"type": "options",
"options": [
{
{
"label": "test",
"description": "test"
}{
"label": "next",
"description": "next"
}
}
]
}
}
}
}
}
問題点は2つ。
1つ目は、"options"配列の中に、オブジェクトがあって、さらにその中にlabelとdescriptionメンバーを含むオブジェクト(便宜上、以降"オプションオブジェクト"と呼びます)がありますが、最初のオブジェクトは不要です。配列内に直接オプションオブジェクトを並べてください。
2つ目は、オプションオブジェクト同士の間にカンマが入っていないことです。配列内のオブジェクト間にはカンマが必要です。
それと、27行目でlabelメンバーの末尾にカンマを付けていますが、29行目のif文内でカンマを付けたほうが良いです。quick_dm_desc(cnt) が空だった場合に、不要なカンマが残ってJSONの構文エラーになってしまいます。
>mesboxで確認してみたところ、jsonの記述がおかしくなっています。
"{}"構文で複数行文字列リテラルを書いた場合、先頭の空白がなくなる仕様なので、JSONのインデントが消えます。
ただし、JSONの構文上、インデントはなくてもいいので、Twitter APIに渡す分には問題ありません。
ちなみに、クイック返信は自分宛に送った場合は表示されないっぽいので、動作確認する場合は、自分の別アカウントに送る必要がありそうです。
| |
|
2022/5/27(Fri) 23:02:31|NO.96478
自力でモジュールを改造して、クイック返信をできるようにし、関数のパラメーターを増やすと長くなってしまうので、配列変数でクイック返信を指定できるようにし、サブアカウントの方からメインアカウントの方に、APIでクイック返信付きメッセージが送れたことは確認できました。
↓完成できたモジュール
#define global SendDM_quick(%1, %2, %3="",%4,%5) _SendDM_quick_ %1, %2, %3, %4, %5
#deffunc _SendDM_quick_ str p1 , str recipient_user_id , str media_id , array quick_dm , array quick_dm_desc
text_DM = ConvertToUnicodeEscapeSequence(p1)
json = strf({"
{
"event": {
"type": "message_create",
"message_create": {
"target": {
"recipient_id": %s
},
"message_data": {
"text": "%s"
"}, recipient_user_id, text_DM)
if (quick_dm(0) != ""){
json += {"
,
"quick_reply": {
"type": "options",
"options": [
"}
repeat length(quick_dm)
quick_dm(cnt) = ConvertToUnicodeEscapeSequence(quick_dm(cnt))
json += strf("{\n\"label\": \"%s\"\n",quick_dm(cnt))
if quick_dm_desc(cnt) != "" {
quick_dm_desc(cnt) = ConvertToUnicodeEscapeSequence(quick_dm_desc(cnt))
json += strf({"
,"description": "%s"
"},quick_dm_desc(cnt))
}
json += "}\n"
if length(quick_dm) != cnt+1:json += ","
loop
if (quick_dm(0) != ""){
json += {"
]
}
"}
}
}
if (media_id != "") {
json += strf({"
,
"attachment": {
"type": "media",
"media": {
"id": %s
}
}
"}, media_id)
}
json += {"
}
}
}
}
"}
execRestApi "direct_messages/events/new.json", json, METHOD_POST
return stat
クイック返信の引数が侵略されたら、エラーが出ないようにしたいのですが、侵略されたらクイック返信なしDMにすることはできないのでしょうか?
ちなみに、クイック返信はいくつまで増やせますか?
一応関数名をSendDM_quickに変えてみました
//コンシューマーキー取得省略
label = "あいうえお","かきくけこ","さしすせそ"
description = "アイウエオ","カキクケコ","サシスセソ"
SendDM_quick "クイック返信テスト","user_id",,label,description
if stat = 200{
dialog "成功"
}else{
dialog "失敗"+stat,1
}
objmode 2
pos 0,0
_response = "##### HEADER ######\n"+getResponseHeader()+"\n##### BODY #####\n"+getResponseBody()
mesbox _response,640,480,4
| |
|
2022/5/27(Fri) 23:10:34|NO.96479
あと、ここを変えるとAPIからのエラーが出ちゃいますね…
""にしたら、descriptionを追加させないようにしたいのですが、よろしくお願いします。
label = "あいうえお","かきくけこ","さしすせそ"
description = "アイウエオ","",""
SendDM_quick "クイック返信テスト","1477043699662340096",,label,description
|
|
2022/5/28(Sat) 10:16:50|NO.96483
クイック返信のモジュールはこんな感じで問題ないですよね?
一応修正はしたのですが…。
#define global SendDM_quick(%1, %2, %3="",%4,%5) _SendDM_quick_ %1, %2, %3, %4, %5
#deffunc _SendDM_quick_ str p1 , str recipient_user_id , str media_id , array quick_dm , array quick_dm_desc
text_DM = ConvertToUnicodeEscapeSequence(p1)
json = strf({"
{
"event": {
"type": "message_create",
"message_create": {
"target": {
"recipient_id": %s
},
"message_data": {
"text": "%s"
"}, recipient_user_id, text_DM)
if (quick_dm(0) != ""){
json += {"
,
"quick_reply": {
"type": "options",
"options": [
"}
repeat length(quick_dm)
if quick_dm(cnt) != "" {
quick_dm(cnt) = ConvertToUnicodeEscapeSequence(quick_dm(cnt))
json += strf("{\n\"label\": \"%s\"\n",quick_dm(cnt))
if quick_dm_desc(cnt) != "" {
quick_dm_desc(cnt) = ConvertToUnicodeEscapeSequence(quick_dm_desc(cnt))
json += strf({"
,"description": "%s"
"},quick_dm_desc(cnt))
}
json += "}\n"
if length(quick_dm) != cnt+1 {
if quick_dm(cnt+1) != "" : json += ",\n"
}
}
loop
if (quick_dm(0) != ""){
json += {"
]
}
"}
}
}
if (media_id != "") {
json += strf({"
,
"attachment": {
"type": "media",
"media": {
"id": %s
}
}
"}, media_id)
}
json += {"
}
}
}
}
"}
execRestApi "direct_messages/events/new.json", json, METHOD_POST
return stat
| |
|
2022/5/28(Sat) 11:19:45|NO.96485
>侵略されたらクイック返信なしDMにすることはできないのでしょうか?
侵略ではなく「省略」ですかね。
HSPの仕様上、varやarrayによる変数指定の省略はできないので、マクロで引数省略時にダミー変数を渡すか、クイック返信できるもの/できないもの で命令を分けるしかないですね。
>クイック返信はいくつまで増やせますか?
ドキュメントを読みましょう。
https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/sending-and-receiving/api-reference/new-event
「Message Data Object」の「quick_reply.type (optional)」内に、「20 max」と書いてあります。
>あと、ここを変えるとAPIからのエラーが出ちゃいますね…
>""にしたら、descriptionを追加させないようにしたいのですが、よろしくお願いします。
Twitter APIからのレスポンスのボディに、エラー内容がJSON形式で返ってるはずです。
エラー文を翻訳するなり、エラーコードを調べるなりしてみましょう。
>クイック返信のモジュールはこんな感じで問題ないですよね?
作成されたJSONを確認する限り、問題ないと思います。labelメンバーの末尾にあったカンマもしっかり修正されてますね。
ちなみに、コードのインデントがバラバラで大変見づらいので、インデントはしっかり揃えた方が良いですよ。
|
|
2022/5/28(Sat) 12:38:17|NO.96487
>作成されたJSONを確認する限り、問題ないと思います。labelメンバーの末尾にあったカンマもしっかり修正されてますね。
配列変数に""だったら、処理しないようにしたいんですけど…。しっかり末尾にカンマが出てこないです。
>ちなみに、コードのインデントがバラバラで大変見づらいので、インデントはしっかり揃えた方が良いですよ。
どうやって、揃えたらいいんですかね。
#include "hsp3utf.as"
#module
#uselib "kernel32.dll"
#func lstrlenW "lstrlenW" int
#defcfunc ConvertToUnicodeEscapeSequence str p1
sdim text_utf16, strlen(p1) * 2 + 2
cnvstow text_utf16, p1
result=""
repeat lstrlenW(varptr(text_utf16))+8
code = wpeek(text_utf16, cnt * 2)
result += strf("\\u%04x", code)
loop
strrep result,"\\u0000",""
return result
#define global SendDM_quick(%1, %2, %3="",%4="",%5="") _SendDM_quick_ %1, %2, %3, %4, %5
#deffunc _SendDM_quick_ str p1 , str recipient_user_id , str media_id , array quick_dm , array quick_dm_desc
text_DM = ConvertToUnicodeEscapeSequence(p1)
json = strf({"
{
"event": {
"type": "message_create",
"message_create": {
"target": {
"recipient_id": %s
},
"message_data": {
"text": "%s"
"}, recipient_user_id, text_DM)
if (quick_dm(0) != ""){
json += {"
,
"quick_reply": {
"type": "options",
"options": [
"}
repeat length(quick_dm)
if quick_dm(cnt) != "" {
quick_dm(cnt) = ConvertToUnicodeEscapeSequence(quick_dm(cnt))
json += strf("{\n\"label\": \"%s\"\n",quick_dm(cnt))
if quick_dm_desc(cnt) != "" {
quick_dm_desc(cnt) = ConvertToUnicodeEscapeSequence(quick_dm_desc(cnt))
json += strf({"
,"description": "%s"
"},quick_dm_desc(cnt))
}
json += "}\n"
if length(quick_dm) != cnt+1 {
if quick_dm(cnt+1) != "" : json += ",\n"
}
}
loop
if (quick_dm(0) != ""){
json += {"
]
}
"}
}
}
if (media_id != "") {
json += strf({"
,
"attachment": {
"type": "media",
"media": {
"id": %s
}
}
"}, media_id)
}
json += {"
}
}
}
}
"}
return json
#global
quick = "テスト1","","","テスト4"
description = "一","","","テスト四"
SendDM_quick "あいうえお","1","0",quick,description
json =refstr
mesbox json,640,480,4
| |
|
2022/5/28(Sat) 13:00:30|NO.96488
>配列変数に""だったら、処理しないようにしたいんですけど…。しっかり末尾にカンマが出てこないです。
すみません質問の意味が分かりません。
quick_dmに空の配列変数を渡された場合にクイック返信のJSONを追加しない、というのであればすでに達成されてるように思いますが。
末尾にカンマが出てこない、とは……?
>どうやって、揃えたらいいんですかね。
まず、下記のところはインデントを増やしてください。
・#deffunc/#defcfunc内
・repeat〜loop内
・if内
「if内にrepeatがある」などネストしている場合には、インデントも重ねて増やしてください。
インデントを揃えたものがこちらです。
if (quick_dm(0) != "") の中にあるコードや、どこからどこまでrepeat〜loopしているのかが一目瞭然になったと思います。
#include "hsp3utf.as"
#module
#uselib "kernel32.dll"
#func lstrlenW "lstrlenW" int
#defcfunc ConvertToUnicodeEscapeSequence str p1
sdim text_utf16, strlen(p1) * 2 + 2
cnvstow text_utf16, p1
result=""
repeat lstrlenW(varptr(text_utf16))+8
code = wpeek(text_utf16, cnt * 2)
result += strf("\\u%04x", code)
loop
strrep result,"\\u0000",""
return result
#define global SendDM_quick(%1, %2, %3="",%4="",%5="") _SendDM_quick_ %1, %2, %3, %4, %5
#deffunc _SendDM_quick_ str p1 , str recipient_user_id , str media_id , array quick_dm , array quick_dm_desc
text_DM = ConvertToUnicodeEscapeSequence(p1)
json = strf({"
{
"event": {
"type": "message_create",
"message_create": {
"target": {
"recipient_id": %s
},
"message_data": {
"text": "%s"
"}, recipient_user_id, text_DM)
if (quick_dm(0) != ""){
json += {"
,
"quick_reply": {
"type": "options",
"options": [
"}
repeat length(quick_dm)
if quick_dm(cnt) != "" {
quick_dm(cnt) = ConvertToUnicodeEscapeSequence(quick_dm(cnt))
json += strf("{\n\"label\": \"%s\"\n",quick_dm(cnt))
if quick_dm_desc(cnt) != "" {
quick_dm_desc(cnt) = ConvertToUnicodeEscapeSequence(quick_dm_desc(cnt))
json += strf({"
,"description": "%s"
"},quick_dm_desc(cnt))
}
json += "}\n"
if length(quick_dm) != cnt+1 {
if quick_dm(cnt+1) != "" : json += ",\n"
}
}
loop
if (quick_dm(0) != ""){
json += {"
]
}
"}
}
}
if (media_id != "") {
json += strf({"
,
"attachment": {
"type": "media",
"media": {
"id": %s
}
}
"}, media_id)
}
json += {"
}
}
}
}
"}
return json
#global
quick = "テスト1","","","テスト4"
description = "一","","","テスト四"
SendDM_quick "あいうえお","1","0",quick,description
json =refstr
mesbox json,640,480,4
| |
|
2022/5/28(Sat) 13:07:18|NO.96489
NO.96487のコードにある、ConvertToUnicodeEscapeSequence命令の
repeat lstrlenW(varptr(text_utf16))+8
の末尾の +8 と、
strrep result,"\\u0000",""
は要らないと思うのですが、どういう意図で追加してるのでしょうか?
NO.96453のコードを、NO.96468の通りに修正しただけで十分機能すると思うのですが、なにか処理できない文字がありましたか?
|
|
2022/5/28(Sat) 14:55:58|NO.96491
おお、ありがとうございます。
>NO.96453のコードを、NO.96468の通りに修正しただけで十分機能すると思うのですが、なにか処理できない文字がありましたか?
クイック返信が豆腐の文字が表示されていたので、変えたらstrrep命令で0が含まれる改善すると思い、追加しました。
あと、ちなみにHSPからウェルカムメッセージを指定したいのですが、どうやっても失敗します。
Pythonではできたのですが、HSPからウェルカムメッセージを指定することはできませんよね?
とりあえず、ウェルカムメッセージを指定できたら、このスレッドは解決することにします。
#include "hsp3utf.as"
#include "TsubuyakiSoup_mod_utf.hsp"
#module
#uselib "kernel32.dll"
#func lstrlenW "lstrlenW" int
#defcfunc ConvertToUnicodeEscapeSequence str p1
sdim text_utf16, strlen(p1) * 2 + 2
cnvstow text_utf16, p1
result=""
repeat lstrlenW(varptr(text_utf16))+8
code = wpeek(text_utf16, cnt * 2)
result += strf("\\u%04x", code)
loop
strrep result,"\\u0000",""
return result
#define global SendDM_quick(%1, %2, %3="",%4="",%5="") _SendDM_quick_ %1, %2, %3, %4, %5
#deffunc _SendDM_quick_ str p1 , str recipient_user_id , str media_id , array quick_dm , array quick_dm_desc
text_DM = ConvertToUnicodeEscapeSequence(p1)
text_DM = ConvertToUnicodeEscapeSequence(p1)
json = strf({"
{
"event": {
"type": "message_create",
"message_create": {
"target": {
"recipient_id": %s
},
"message_data": {
"text": "%s"
"}, recipient_user_id,text_DM)
if (media_id != "") {
json += strf({"
,
"attachment": {
"type": "media",
"media": {
"id": %s
}
}
"}, media_id)
}
json += {"
}
}
}
}
"}
return json
#define global SetWelcomeMessage(%1, %2="",%3,%4) _SetWelcomeMessage_ %1, %2, %3, %4
#deffunc _SetWelcomeMessage_ str p1 , str media_id , array quick_dm , array quick_dm_desc
text_DM = ConvertToUnicodeEscapeSequence(p1)
json = strf({"
{
"welcome_message" : {
"message_data": {
"text": "%s"
"}, text_DM)
if (quick_dm(0) != ""){
json += {"
,
"quick_reply": {
"type": "options",
"options": [
"}
repeat length(quick_dm)
if quick_dm(cnt) != "" {
quick_dm(cnt) = ConvertToUnicodeEscapeSequence(quick_dm(cnt))
json += strf("{\n\"label\": \"%s\"\n",quick_dm(cnt))
if quick_dm_desc(cnt) != "" {
quick_dm_desc(cnt) = ConvertToUnicodeEscapeSequence(quick_dm_desc(cnt))
json += strf({"
,"description": "%s"
"},quick_dm_desc(cnt))
}
json += "}\n"
if length(quick_dm) != cnt+1 {
if quick_dm(cnt+1) != "" : json += ",\n"
}
}
loop
if (quick_dm(0) != ""){
json += {"
]
}
"}
}
}
if (media_id != "") {
json += strf({"
,
"attachment": {
"type": "media",
"media": {
"id": %s
}
}
"}, media_id)
}
json += {"
}
}
}
"}
execRestApi "direct_messages/welcome_messages/new.json", json, METHOD_POST
return stat
#global
CONSUMER_KEY = ""
CONSUMER_SECRET = ""
ACCESS_TOKEN = ""
ACCESS_SECRET = ""
exist "keytoken.txt"
if strsize < 0 : dialog "KEY TOKENを取得してから実行してください。\nhttps://developer.twitter.com/en/apps からKEYを取得できます。",1:end
notesel keytoken
noteload "keytoken.txt"
noteget CONSUMER_KEY,1
noteget CONSUMER_SECRET,3
noteget ACCESS_TOKEN,5
noteget ACCESS_SECRET,7
if CONSUMER_KEY = "" | CONSUMER_SECRET = "" | ACCESS_TOKEN = "" | ACCESS_SECRET = "" {
dialog "KEY TOKENを取得してから実行してください。\nhttps://developer.twitter.com/en/apps からKEYを取得できます。",1:end
end
}
tCupInit "testClient", CONSUMER_KEY, CONSUMER_SECRET, 10
setAccessToken ACCESS_TOKEN, ACCESS_SECRET
;Tweet "ツイートする文章を入力","リプライID(文字列)","画像/動画メディアID(文字列)"
quick = ""
description = ""
SetWelcomeMessage "ウェルカムメッセージテスト","",quick,description
sdim quick
sdim description
if stat = 200{
dialog "成功"
}else{
dialog "失敗"+stat,1
}
objmode 2
pos 0,0
_response = "##### HEADER ######\n"+getResponseHeader()+"\n##### BODY #####\n"+getResponseBody()
mesbox _response,640,480,4
stop
ここを見ながらやりました。
https://irucabot.com/blog/twitterapi/welcomemessage_py/
| |
|
2022/5/28(Sat) 19:31:12|NO.96495
ありがとうございます。
後で試そうと思いますが、direct_messages/welcome_messages/destroy.json も同じように
api =! "direct_messages/welcome_messages/destroy.json"
と
api == "direct_messages/welcome_messages/destroy.json"
も追加する必要もありますよね?
direct_messages/welcome_messages/destroy.json の疑問符の後に、IDを入れるみたいなんですが、どうなんですかね。
|
|
2022/5/28(Sat) 22:56:28|NO.96499
#deffunc DeleteWelcomeMessage str id
arguments = "id=" + id
execRestApi "direct_messages/welcome_messages/destroy.json", arguments,METHOD_DELETE
return stat
これで合っていますよね…?
がしかし、
---------------------------
Error
---------------------------
#Error 6 in line 627 (tCup_mod_utf.hsp)
-->パラメータの型が違います
---------------------------
OK
---------------------------
というエラー出てしまいます。
|
|
2022/5/29(Sun) 10:56:10|NO.96502
METHOD_DELETEの時に、RequestHeaderが0(空)になってるのが原因のようですね。
PostDataLengthとPostDataも初期化されてないので、これ以降もエラーになりそうです。
592行目を下記のように書き換えるとどうでしょう?
if (methodType = METHOD_GET) {
↓
if (methodType = METHOD_GET || methodType = METHOD_DELETE) {
|
|
2022/5/29(Sun) 18:27:51|NO.96503
>METHOD_DELETEの時に、RequestHeaderが0(空)になってるのが原因のようですね。
>PostDataLengthとPostDataも初期化されてないので、これ以降もエラーになりそうです。
なるほど、tcupのソースモジュールの方には、元々RequestHeaderがなかったんですね。
あと、画像付きウェルカムメッセージをやりたいのですが、失敗してしまいます。
動画付きウェルカムメッセージでもいけますよね?
何が原因でしょうか
#include "hsp3utf.as"
#include "TsubuyakiSoup_mod_utf.hsp"
#include "hspinet.as"
//コンシューマーキー取得省略
;Tweet "ツイートする文章を入力","リプライID(文字列)","画像/動画メディアID(文字列)"
dim PtrRoot
sdim wel_id
quick = ""
description = ""
image = "画像.jpg"
exist image
if strsize ! -1 {
media_upload image, length(image), mediaid
}else{
mediaid = ""
}
SetWelcomeMessage "ウェルカムメッセージテスト",mediaid,quick,description
response = getResponseBody()
if stat = 200{
jsonopen PtrRoot,response
jsongetobj PtrRoot,"welcome_message",PtrRoot
jsongets wel_id,"id",PtrRoot
jsonclose
SendWelcomeMessage wel_id
if stat = 200 : dialog "成功"
}else{
dialog "失敗"+stat,1
}
objmode 2
pos 0,0
_response = "##### HEADER ######\n"+getResponseHeader()+"\n##### BODY #####\n"+getResponseBody()
mesbox _response,640,480,4
stop
|
|
2022/5/29(Sun) 23:59:03|NO.96506
まず、ただ「失敗した」ではなく、「どう失敗したのか」を知りましょう。
前の返信でも書きましたが、レスポンスにエラー内容が返っているはずです。
ちなみに、NO.96489で質問したConvertToUnicodeEscapeSequence命令について、意味の通る文で再度説明していただけないでしょうか?
|
|
2022/5/30(Mon) 08:30:00|NO.96508
おっとすいません。
#module
#uselib "kernel32.dll"
#func lstrlenW "lstrlenW" int
#defcfunc ConvertToUnicodeEscapeSequence str p1
sdim text_utf16, strlen(p1) * 2 + 2
cnvstow text_utf16, p1
result=""
repeat lstrlenW(varptr(text_utf16))
code = wpeek(text_utf16, cnt * 2)
result += strf("\\u%04x", code)
loop
return result
で十分だったようです。
豆腐の文字が出てたようなので、修正する必要があると思いましたが…。
ちなみに、ウェルカムメッセージのエラー内容は、There was an error sending your message: Media attached to Welcome Messages must have been uploaded with 'shared' flag set to true.
ということなので、第5引数にsharedのフラグを指定してみたのですが、第5引数に1にしても、同じエラーが出ます。
どこにフラグを追加すればいいのでしょうか?
ググって調べてみたのですが、media関連のリファレンスにsharedフラグについて、どこにも載っていませんでした。
#define global media_upload(%1,%2,%3,%4=0,%5=0) media_upload_ %1,%2,%3,%4
#deffunc media_upload_ array p1 ,int p3,var p2, int hProgress,int shared
logmes "media_upload"
sdim rawtext,512
sdim p2,512
;sdim picname,1024
sdim arguments, 1024
if shared :arguments(0) = "shared=true"
repeat p3
exist p1(cnt)
if strsize <= 0:return 1
if hProgress: sendmsg hProgress, $402, 0:wait 10
arguments(1) = "media="+p1(cnt)
execRestApi "media/upload.json", arguments, METHOD_XMPOST, hProgress
if (stat != 200) :return 2 //ステータスコードが失敗
rawtext = "["+getResponseBody()+"]"
json_sel rawText
p2 += json_val("[0].media_id_string") + ","
json_unsel
wait 10
loop
p2 = strmid(p2, 0, strlen(p2)-1)
return 0
| |
|
2022/5/30(Mon) 08:37:23|NO.96509
おっと、defineのmedia_uploadの部分を書き換えるの忘れていました。
#define global media_upload(%1,%2,%3,%4=0,%5=0) media_upload_ %1,%2,%3,%4,%5
に変えてみましたが同様です。
|
|
2022/5/30(Mon) 20:18:35|NO.96513
|
|
2022/5/31(Tue) 08:18:04|NO.96520
|
|
2022/5/31(Tue) 22:17:54|NO.96529
返信が遅くなりました。
NO.96513でも提示されているページに
> Note: Media for use with Direct Messages should be uploaded using the asynchronous chunked upload process described on this page.
と書いてあり、どうやらmedia_upload命令で行っている一回でアップロードする方法ではなく、video_upload命令で行っている複数回に分けてアップロードする方法を使う必要があるようです。
なので、video_upload命令を改造します。汎用性を考えると説明が長くなるため、ウェルカムメッセージ用の画像をアップロードする場合の変更点だけを書きます。命令の引数で分岐するか、それ用の別の命令を作るなどしてください。
1. 引数の media_type を image/png に
2. 引数の media_category を dm_image に
3. 引数に shared=true を追加
4. 下らへんにある下記コードの、11行目〜17行目を、3行目の wait 500 の前に移動
repeat
wait 500
sdim arguments, 256
arguments(0) = "command=STATUS"
arguments(2) = "media_id="+mediaID
execRestApi "media/upload.json", arguments, METHOD_GET
s = stat
if ( (s/100) != 2 ):return 5 //ステータスの取得でエラー
res = "["+getResponseBody()+"]"
json_sel res
state = json_val("[0].processing_info.state")
percent = json_val("[0].processing_info.progress_percent")
json_unsel
if state != "pending" && state != "in_progress":break
loop
手順4の解説:
あのコードは、media/upload.json (command=STATUSの引数) でスタータスを取得し、そのステータスをみてメディアの処理が終わるまで待機するコードです。スタータス取得は、media/upload.json (command=FINALIZE の引数) が返したレスポンスのJSONに"processing_info"キーが含まれている場合に行う必要があります (参照: https://developer.twitter.com/en/docs/twitter-api/v1/media/upload-media/api-reference/get-media-upload-status )。
しかし、前述した画像のアップロード方法だとレスポンスに"processing_info"キーが含まれていないため、ステータス取得が失敗してしまい、アップロードは完了しているのにも関わらず命令が 5 を返してしまいます。
なので、あのコードの11行目〜17行目にある「メディアの処理が終わったかの判定処理」を先に持ってくることにより、スタータス取得を実行せずにループを抜けさせています。
動画の場合は、前述の手順3の改造を行うだけで大丈夫です。
| |
|
2022/6/3(Fri) 19:44:50|NO.96549
おお、ありがとうございます。
返信が非常に遅くなりすいません。
media_uploadで画像付きウェルカムメッセージができなかったんですね…。
video_uploadのソースを改造して、工夫する必要があったんですね…!
direct_messages/welcome_messages/rules/destroy.json
あと、ウェルカムメッセージを削除する際に、成功しているのにも関わらず、ステータスコードが204って出るのですが、これって仕様なんですかね…。
#deffunc GetWelcomeMessage
sdim arguments
arguments(0) = ""
execRestApi "direct_messages/welcome_messages/list.json", arguments,METHOD_GET
return stat
#deffunc DeleteWelcomeMessage str id
sdim arguments
arguments(0) = "id="+id
execRestApi "direct_messages/welcome_messages/destroy.json", arguments,METHOD_DELETE
return stat
//キー取得インクルード省略
dim PtrRoot
sdim wel_id
quick = ""
description = ""
GetWelcomeMessage
response = getResponseBody()
if stat = 200{
jsonopen PtrRoot,response
jsongetobj PtrRoot,"welcome_messages",PtrRoot
jsonnext PtrRoot,PtrRoot,2
jsongets wel_id,"id",PtrRoot
jsonclose
DeleteWelcomeMessage wel_id
dialog "実行ステータス"+stat
}else{
dialog "失敗"+stat,1
}
objmode 2
pos 0,0
_response = "##### HEADER ######\n"+getResponseHeader()+"\n##### BODY #####\n"+getResponseBody()
mesbox _response,640,480,4
stop
とりあえず、画像付きウェルカムメッセージも、動画付きウェルカムメッセージもできたようなので、解決にしておきます。
| |
|
2022/6/3(Fri) 20:52:56|NO.96551
>ウェルカムメッセージを削除する際に、成功しているのにも関わらず、ステータスコードが204って出るのですが、これって仕様なんですかね…。
仕様です。HTTPステータスコードの200番台は「成功」を意味するらしく、200でなくとも202や204でも成功はしています。
「204」はNo Contentを意味し、「レスポンスのボディにコンテンツはない」ということだと思います。ただの削除なので、成功可否だけ分かれば十分ですからね。
なので、video_upload命令内では成功確認を下記のようにしていたりします。
// 成功
if ((stat/100) == 2)
|
|