タブレット用プログラムの書き止め

android OS & iPadOS の記録。

浮気。visual studio2022を利用。<Line notify 画像送信 VB.NET>

2022-05-19 11:30:32 | Android studio 日記

今までLineに不信感を持っていて使用していなかった。
状況の変化と、利用の注意を怠らないという事で始める。
ゲームの連携でgoogle、Lineなどを使い機種変更しても楽に移行できるのが大きい。

Lineの使い方を検索していて、利用アカウントでtokenを取得するとExcelで指定時間に通知を自分に発信できる事を知った。

メッセージだけではなく、スタンプや画像も送れるという。
これは試すしかないとvisual studioをインストール。
ExcelはVBAで記述だったので、VB.NETでサンプルを作る。

今は作成手順を確認中。
デザインとオブジェクトのアクションを決めれば、プログラムの骨子を排出してくれる。VB.NETだけ?
オリジナリティを出さなければ、データの処理部分を記入するだけで完了のよう。

何に利用できるかはこれから考える。

 

<2022,5,20 追記>

Line notify 利用でメッセージのみ通知は即完了。
画像付きは難易度アップ。
公式ページの説明は開発者向けで初心者向けではない。
サンプルもほとんど無い。POSTを熟知している人向けだった。

Content-Typeでどちらか使用。
・application/x-www-form-urlencoded
・multipart/form-data
だけど2つの違いの説明なし。
知っていることを前提のようだ^^;

上はテキストオンリーの時。
下はテキスト、バイナリー混合の時に設定。

VB.NET
テキストオンリーならテキストボックスでトークンとメッセージを用意すればOK。
    token_TextBox.Text
    msg_TextBox.Text



Private Sub send_Line()
    Dim xml_http As Object

    xml_http = CreateObject("MSXML2.XMLHTTP")
    xml_http.Open("POST", "https://notify-api.line.me/api/notify", False)
    xml_http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
    xml_http.setRequestHeader("Authorization", "Bearer " & token_TextBox.Text)
    xml_http.send(" message=" & msg_TextBox.Text)
End Sub

送信ボタンをクリックしてプログラムを実行。
すると通知される。

あとは画像だ。
あれ、画像のアップロードが見つからない(;^;
以前、検索で見たと思ったんだけど出てこない…。

xml_http.setRequestHeader("Content-Type", "multipart/form-data")
に変更して、
xml_http.send() を混合データを送信するメソッドに変えれば…。
このクラスに無いよ^^;

別の説明のクラスは複雑だけど、それを使うしかない。

なんか、curl.exeをVB.NETで使用すれば、簡単に画像付き通知ができるけどどうしよう。

<2022,5,21 追記>

フォームのテキストボックスに入力された文字Text。
token_TextBox.Text
msg_TextBox.Text
picturePath_TextBox.Text


    Private Sub send_Line()
        Shell("curl.exe" &
        " -X POST https://notify-api.line.me/api/notify" &
        " -H ""Authorization: Bearer """ & token_TextBox.Text &
        " -F message=" & msg_TextBox.Text &
        " -F imageFile=@" & picturePath_TextBox.Text, vbNormalFocus)
    End Sub

win11は"curl.exe"がシステムに入っていてそのまま使えた。
説明の注釈にあったように日本語は文字化け。

 

苦肉の策。

日本語メッセージのみと半角アルファベット+画像の2方式モードを切り替える。
画像ファイルが存在しなければ、日本語メッセージで送信。
画像ファイルが有れば、半角アルファベット+画像のモード送信とする。

 


画像パスをチェックして画像ファイルが有れば、ピクチャーボックスに表示。

    Private Sub picturePath_TextBox_TextChanged(sender As Object, e As EventArgs) Handles picturePath_TextBox.TextChanged
        If My.Computer.FileSystem.FileExists(picturePath_TextBox.Text) And
           Me.picturePath_TextBox.Text.IndexOf(".jpg", StringComparison.OrdinalIgnoreCase) >= 0 Then
            PictureBox1.ImageLocation = picturePath_TextBox.Text
        ElseIf Not (PictureBox1.Image Is Nothing) Then
            PictureBox1.Image.Dispose()
            PictureBox1.Image = Nothing
        End If
    End Sub

画像の有無で送信方法を変える。
文字のみは日本語表示OK。

    Private Sub send_Line()
        If (PictureBox1.Image Is Nothing) Then
            Dim xml_http As Object

            xml_http = CreateObject("MSXML2.XMLHTTP")
            xml_http.Open("POST", "https://notify-api.line.me/api/notify", False)
            xml_http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
            xml_http.setRequestHeader("Authorization", "Bearer " & token_TextBox.Text)

            xml_http.send(" message=" & msg_TextBox.Text)
        Else
            Shell("curl.exe" &
            " -X POST https://notify-api.line.me/api/notify" &
            " -H ""Authorization: Bearer """ & token_TextBox.Text &
            " -F message=" & msg_TextBox.Text &
            " -F imageFile=@" & picturePath_TextBox.Text, vbNormalFocus)
        End If
    End Sub

複雑なクラスを使えば、日本語メッセージ+画像送信ができそう。
面倒なのであとで…。