messaging apiを勉強しているのですが、以下のjsonの、actionsのdataのaction="begin&res=yes"の部分において、actionを取得したい時はbeginを、resを取得したいときはyesを取得するようにしたいのですが、自分が書いたコードだとなぜかaction='action'、res='res'となってしまいます。
※追記
2番目書いたものにおいて、action='begin'、res="yes"もしくは"no"のように取得したいです。
最後に書いたやり方で取得すると、action='action'、res='res'となぜか文字列がそのまま取得されてしまいます。
どうにかaction='begin'、res="yes" or "no"と取得できないでしょうか。
message = { "type": "template", "altText": "this is a confirm template", "template": { "type": "confirm", "text": "Are you sure?", "actions": [ { "type": "postback", "label": "yes", "data": "action=begin&res=yes" }, { "type": "postback", "label": "No", "text": "no", "data": "action=begin&res=no" } ] } }
{"events"=>[{"type"=>"postback", "replyToken"=>"hoge", "source"=>{"userId"=>"hoge", "type"=>"user"}, "timestamp"=>1606388380238, "mode"=>"active", "postback"=>{"data"=>"action=begin&res=yes"}}], "destination"=>"hoge", "linebot"=>{"events"=>[{"type"=>"postback", "replyToken"=>"hoge", "source"=>{"userId"=>"hoge", "type"=>"user"}, "timestamp"=>1606388380238, "mode"=>"active", "postback"=>{"data"=>"action=begin&res=yes"}}], "destination"=>"hoge"}}
events.each do |event| #~~~~省略~~~~ action = event['postback']['data']['action'] #これだと'begin'ではなく'action'が取得される res = event['postback']['data']['res'] #これだと'yes'ではなく'res'が取得される
コード中のeventとは何ですか?
messaging apiで何かしらのアクションがあるとeventsパラメータとして内容が返ってきます。そのパラメータの中から質問内容のものを取り出したいのです。
ごめんなさい、かなり説明不足でした。追記させていただきます。
1.eventはその上のmessageとどういう関係ですか?
2.タイトルではjsonとお書きですが、messageに代入されているのはjsonでなくハッシュです。jsonとハッシュの区別が付いてない?
後で注記:すいません、Pythonと混ざってました。Rubyのハッシュじゃ無いですね。
1.messageは送信内容で、送信を行うとそれに伴ってeventsが帰ってきます。
2.勉強したばかりなので区別がついていない状態でした。ご指摘ありがとうございます。
messageが質問と無関係だということが分かりました。
2番目に書かれている物と、event変数とはどういう関係ですか?
2番目に書いてるものはアクションに伴って帰ってくるパラメータで、そのパラメータの中身をevents.each do |event|でevent変数にして要素を取得しようとしています。説明が下手で申し訳ないです。
2番目に書かれている物は、eventsの中身(p eventsを整形した物)ということでしょうか?
それだお書きのコードはエラーになりますね。
元のコードでは整形してないです。質問に載せるため見やすいよう整形したものを載せました。整形してないものに変えさせていただきます。
ああ、整形したかどうかは関係ないので、見にくいので整形したものに戻してください。
ん?2番目ですが、さっきのはJSONらしきもので、いま載っているのはRubyのハッシュで、単なる整形じゃ無いですね。
x = 2番目のもの
events = x["events"]
ということですかね?
これで、ようやく質問を考えるスタートラインです。
2番目戻さなくて良いです。
真剣に考えてくださってありがとうございます。勉強し始めたばかりなのでよく理解できてないのが現状です。。。
回答1件
あなたの回答
tips
プレビュー