2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[解決編]AlexaからIFTTT経由でショッピングリストの情報を取得すると文字化けするのをなんとかした

Last updated at Posted at 2018-10-14

この続きです。

前回は文字化けの正体がわからないままだったので、どうにもできなかったが、
@yoshiro_mihiraさん、@mstk0531さんからのコメントを元に自分なりのフローに当てはめてみたところ、なんとか上手くいったので書き残しておく。

Alexaの買い物リストを流用したい人は最終的なアウトプットがそれぞれ別々だと思うのでデコード後の処理は適当に読みかえてもらえるとありがたい。

文字コード関連

@mstk0531さんのこの記事にてnode-redのnode-red-contrib-iconvで文字コード変換なら使用できる状態になることがわかった。

もじばけらったで文字コードを改めて調査。
2018-10-14_17h40_10.png
2018-10-14_17h39_33.png

お二人のいうように[ISO-8859-1]→[UTF-8]ということを確認。
そのうえでPythonで試行錯誤した結果、こんな感じに。

def lambda_handler(event, context):
    get_item_name = event['item']
    bytes_data = get_item_name.encode("ISO-8859-1")
    str_data = bytes_data.decode("UTF-8")
    get_item_name = str_data

これでUTF-8として読み取れるようになった。
いざ書いてみるとシンプルな構成。

その後の処理

ここからMail送信すればWunderListに登録できるけど、前に作ったのを流用すりゃいいと思ったので
WunderListにMailで登録SKILLとIFTTTでWunderListに登録の二つを適当に流用して、もう一回IFTTTに返してそこからMail送信。
なので、ここではPOSTでIFTTTへPOSTするのみ。

こんな感じに。

    # IFTTT の Makerへ送信
    url = 'https://maker.ifttt.com/trigger/towunderlist/with/key/XXXXXXXXXXXXXXXXXXX'
    data = {
        'value1': get_item_name,
    }
    headers = {
        'Content-Type': 'application/json',
    }    
    req = urllib.request.Request(url, json.dumps(data).encode(), headers)
    with urllib.request.urlopen(req) as res:
        body = res.read()

Alexa→IFTTT→Lambda→IFTTT→Gmail→WunderListというよくわからない経路になっているが、買い物リストに登録したものが文字化けしないでWunderListに再び登録できるようになった。
よかったよかった。

感謝

@yoshiro_mihiraさん、@mstk0531さんありがとうございました。

2
2
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?