LazarusでLineBotを作る

LazarusでLineBotを作る

API通信で、LineBotを作ってみます。

環境
Ubuntu16
Lazarus 2.0.10

参考ページ

DelphiでJSON文字列を作成する


http://lazplanet.blogspot.com/2014/09/a-simple-json-parsing-example.html

必要なデータ
LINE_CHANNEL_ACCESS_TOKEN
LINE_SEND_ID // 1対1の送信で、友達になっている送信先のID

事前準備
パッケージ 「indy」を読み込む

ポイント
・JsonのAPI送信のため、Jsonデータを作成し、Strへ変換が必要
・送信データをTStringStreamで作成する必要がある
・HTTPSであるが、LineAPIの場合、idSSLIOHandlerSocketOpenSSL1なしで送れた
・IdHTTPの場合、usesの設定だけではなく、画面に設置しないとエラーになった

宣言部

uses

,IdHTTP
,fpjson,jsonparser  

本体

procedure TForm1.FormCreate(Sender: TObject);
begin
  button1.Caption:='Send';
  edit1.Text:='おはよう!!'; //送信メッセージ
  memo1.Text:=''; //Jsonモニタ用
end;

procedure TForm1.Button1Click(Sender: TObject);
var
ss:TStringStream;
st,st1,LINE_CHANNEL_ACCESS_TOKEN,LINE_SEND_ID:string;

strm:TStringStream;
Data1,Data2 : TJSONObject;
JSONArray: TJSONArray;
begin

  LINE_CHANNEL_ACCESS_TOKEN:="YOUR_CHANNEL_ACCESS_TOKEN";
  LINE_SEND_ID:="SEND_ID";
  IdHTTP1:=TIdHTTP.Create(self);
  strm:=TStringStream.Create('',TEncoding.UTF8);

  IdHTTP1.Request.ContentType:='application/json';
  IdHTTP1.Request.Accept     :='application/json';

  IdHTTP1.Request.CustomHeaders.Add('Authorization:Bearer '+LINE_CHANNEL_ACCESS_TOKEN);

// https://www.gesource.jp/weblog/?p=6067
// http://lazplanet.blogspot.com/2014/09/a-simple-json-parsing-example.html
  Data1 := TJSONObject.Create;
  Data1.Add('type', 'text');
  Data1.Add('text', edit1.Text);

  JSONArray := TJSONArray.Create;
  JSONArray.Add(Data1);
  Data2 := TJSONObject.Create;
  Data2.Add('to', LINE_SEND_ID);

  Data2.Add('messages', JSONArray);
  st1:= Data2.AsJSON;
  Memo1.Lines.Text := st1;

  ss := TStringStream.Create(st1);
  ss.Position := 0;
  st:=IdHTTP1.Post('https://api.line.me/v2/bot/message/push',ss);
  showmessage('send!!');

end;