SlideShare a Scribd company logo
1 of 50
Download to read offline
LINE API 完全に理解した。
LINE Developer Group Q-shu
@ginco25
2020/05/14
今日のコンセプト
「ドキュメントが読めるようになる事」
自分でリファレンスを見つつ、通信を行え
るようになる事。
今日の進行(アジェンダとは言わない絶対)
1. 自己紹介・最初のおことわり
2. LINE API の 成果物紹介
3. HTTP 概要
4. LINE API 概要
5. オウム返しBOT の作成
1.自己紹介
• 名前:たかお Twitter:@ginco25
• お仕事:Java
プライベート:
  Go,Rust を勉強したい。
  コンピュータサイエンス勉強したい。
• 福岡在住
• 21年卒な学生
• 就活先探してます
Messaging API の理解 = LINE APIへの理解
と、思ってます。
2.LINE APIの成果物紹介
• BOT
• LINEログイン
• LINE pay の利用
• 僕はConnpassのサイトをスクレイピングしてくるBOTを作りま
したね。
3.HTTP概要
と、その前に。
Webについておさらいしましょう。
Webとは何か
HTML
HTTPURI
Web
URI
• リソースの住所です。
• URLです。
• 因みに
URL:
Uniform Resource Locator
URI
URL URN
HTML
• 馴染み深いファイルですね。
• 情報のフォーマットを規定したもの。
つまりは、HTMLファイルの書き方についてのルール。
• この規定に認められたデータ(ファイル)が、Webを飛び交
う。
HTTP
• 現在、広く使われている通信プロトコル
• ステートレス性(でも、時代錯誤)
• プロトコル、つまりは通信の「やり方/手順」を規定したもの。
郵便の仕組みに例える
梱包方法の決まり
(HTML)
配達等のルール
(HTTP)
郵便番号と住所
(URI)
郵便の仕組み
(Web)
HTMLファイル
ブラウザ(カッター等)を使って
HTMLファイル(梱包物)を描画(開封)
ブラウザ
HTTPについて
もう少し、詳しく
HTTP
クライアントとサーバ
リクエストとレスポンス
メソッド
ステータスコード
リクエストラインとヘッダーとボディ
クライアント/サーバ アーキテクチャ
• クライアント(ブラウザ等)とサーバに分けて、アプリケー
ション作りましょうよ。という常套手段。
• 馴染み深いかと思います。
(僕はこれ以外のアーキテクチャが浮かびませんがw)
リクエストとレスポンス
• HTTPの通信は リクエストとレスポンスが一対一。
1リクエストにつき1レスポンスがお決まり!!!
• リクエストを送ったら、レスポンスを待つ必要がある。
• これは、HTTPが同期型のプロトコルである証拠。
メソッド
• オブジェクト指向のアレ…とはイメージが違うかも。
• 8つのメソッドがあります。
• それぞれ、目的に応じて使いわけよう。
メソッドとCRUD
CRUD HTTPメソッド
Create POST/PUT
Read GET
Update PUT
Delete Delete
ステータスコード
• 1xx 系:処理中
• 2xx系:成功(これ見ると、ホッとしますよねw)
• 3xx系:リダイレクト(別のところに吹っ飛ばされた)
• 4xx系:クライアントエラー
• 5xx系:サーバエラー(これ見るのが一番嫌です)
リクエストラインとヘッダとボディ
リクエストメッセージ レスポンスメッセージ
リクエストライン
ヘッダ
ボディ
レスポンスライン
ヘッダ
ボディ
論より証拠を出せ!
実際のリクエストとレスポンスを
見せてみろ!!!!
リクエストメッセージ
GET HTTP/1.1
Host:http://www.google.com
(今回はボディ無し)
レスポンスメッセージ
HTTP/1.1 200
…
date: Sat, 09 May 2020 16:24:58 GMT
expires: -1
cache-control: private, max-age=0
content-type: text/html;
charset=UTF-8
…(以下略)
<!doctype html><html itemscope= "
itemtype="http://schema.org/
WebPage" lang= ja">
<head><meta
charset= UTF-8 ><meta{if(…
…(以下略)
リクエストメッセージ
POST / HTTP/1.1
Host: hogehoge.com
Content-Type: text/plain;
charset=utf-8
….
IDとか、PWとか…
レスポンスメッセージ
(リザルト画面へのリンクを
含んだHTML)
HTTP/1.1 303
…
Location: http://hogehoge.com/result
…(以下略)
4.LINE API概要
よく出てくる言葉
• Endpoint:
APIにアクセスするためのURLを指す。
connpassのAPIのエンドポイント:https://connpass.com/api/v1/event/
• Webhook
イベントが発生した時、指定したURLにPOSTを行う仕組み
• JSON
よく、HTTPのボディに入ってくるデータです。
LINE APIの仕組み
引用元:
https://developers.line.biz/ja/docs/messaging-api/
overview/#messaging-
api%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF
ex.
ユーザからBOTメッセージが飛んできたら
LINE Platform
webhockURL:
https://hoge.com/
callback/
https://hoge.com/
callback/
5.オウム返しBOTを作ってみよう
5’.詳細!!! おうむ返しBOT!
とりあえず、共通仕様ドキュメントみてま
すか・・・
(https://developers.line.biz/ja/
reference/messaging-api/)
引用元:https://developers.line.biz/ja/reference/messaging-api/#response
認証
Channel Secret
リクエストボディ HMAC-SHA256アルゴリズム ダイジェスト値
ヘッダー
X-Line-Signature
認証
ダイジェスト値
ヘッダー
X-Line-Signature ==
ちゃんとあってる?
ダイジェスト値(ハッシュ値)
• bodyの内容が異なるとダイジェスト値がずれる(改ざん検知)
• HMAC-SHA256アルゴリズムに用いた秘密 が同じでないと、
ダイジェスト値が当然ずれる(なりすまし防止)
• 暗号とハッシュ化は違う。(復元不可能。元の秘密 がバレに
ない。)
ex.おうむ返し
LINE Platform
webhockURL:
https://hoge.com/
callback/
https://hoge.com/
callback/
https://api.line.me/v2/bot/message/reply
ex.
ユーザからBOTメッセージが飛んできたら
LINE Platform
webhockURL:
https://hoge.com/
callback/
https://hoge.com/
callback/
レスポンス
リクエスト
ex. ユーザからメッセージが来たとき。
LINE Platform からのリクエスト 私達のサーバからのレスポンス
POST
ダイジェスト値
Webhookオブジェクト
(JSON)
POST
ダイジェスト値
Webhookオブジェクト
(JSON)
Webhookオブジェクトとは?
LINE Platform からのリクエスト 私達のサーバからのレスポンス
POST
ダイジェスト値
Webhookオブジェクト
(JSON)
POST
ダイジェスト値
Webhookオブジェクト
(JSON)
ボディにくっついてくる
こいつら
ドキュメントみましょう!
(https://developers.line.biz/ja/
reference/messaging-api/)
実践!!!
実際に、HTTPリクエストを投げてみよ
う。POSTでプッシュメッセージ
ex.任意のクライアントから
LINE Platform
webhockURL:
https://hoge.com/
callback/
https://hoge.com/
callback/
https://api.line.me/v2/bot/message/message
任意のHTTPクライアント
本日は終了。
完全理解頂けたでしょうか?
質問タイム
ありがとうございました!

More Related Content

What's hot

Word pressの可能性とplugin拡張
Word pressの可能性とplugin拡張Word pressの可能性とplugin拡張
Word pressの可能性とplugin拡張
Yuya Matsushima
 

What's hot (16)

Word pressの可能性とplugin拡張
Word pressの可能性とplugin拡張Word pressの可能性とplugin拡張
Word pressの可能性とplugin拡張
 
NativeBaseをはじめとするUIに関する ライブラリを使ったサンプルを作ってみた
NativeBaseをはじめとするUIに関する ライブラリを使ったサンプルを作ってみたNativeBaseをはじめとするUIに関する ライブラリを使ったサンプルを作ってみた
NativeBaseをはじめとするUIに関する ライブラリを使ったサンプルを作ってみた
 
あのアプリの動きをUIKitのみでDIYしてみる(part2)
あのアプリの動きをUIKitのみでDIYしてみる(part2)あのアプリの動きをUIKitのみでDIYしてみる(part2)
あのアプリの動きをUIKitのみでDIYしてみる(part2)
 
カスタムトランジションやジェスチャーを生かしたUIの実装ポイント
カスタムトランジションやジェスチャーを生かしたUIの実装ポイントカスタムトランジションやジェスチャーを生かしたUIの実装ポイント
カスタムトランジションやジェスチャーを生かしたUIの実装ポイント
 
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
 
Google Home, Amazon Echo, LINE Clova クロス開発& Azure Durable Funcitons で時間のかかる処理...
Google Home, Amazon Echo, LINE Clova クロス開発& Azure Durable Funcitons で時間のかかる処理...Google Home, Amazon Echo, LINE Clova クロス開発& Azure Durable Funcitons で時間のかかる処理...
Google Home, Amazon Echo, LINE Clova クロス開発& Azure Durable Funcitons で時間のかかる処理...
 
Firebaseでのファイルアップロード処理と便利ライブラリの紹介
Firebaseでのファイルアップロード処理と便利ライブラリの紹介Firebaseでのファイルアップロード処理と便利ライブラリの紹介
Firebaseでのファイルアップロード処理と便利ライブラリの紹介
 
ライブラリでよくある動きをUIKitのみでDIYしてみる(Part1)
ライブラリでよくある動きをUIKitのみでDIYしてみる(Part1)ライブラリでよくある動きをUIKitのみでDIYしてみる(Part1)
ライブラリでよくある動きをUIKitのみでDIYしてみる(Part1)
 
カスタムトランジションやアニメーションを活用した「写真を生かすUI」のサンプル
カスタムトランジションやアニメーションを活用した「写真を生かすUI」のサンプルカスタムトランジションやアニメーションを活用した「写真を生かすUI」のサンプル
カスタムトランジションやアニメーションを活用した「写真を生かすUI」のサンプル
 
20180914 FiFiC
20180914 FiFiC20180914 FiFiC
20180914 FiFiC
 
RxSwiftでの実装練習の記録ノートとはじめの一歩
RxSwiftでの実装練習の記録ノートとはじめの一歩RxSwiftでの実装練習の記録ノートとはじめの一歩
RxSwiftでの実装練習の記録ノートとはじめの一歩
 
#o_giriのタグでネタPOSTするといいことがあるらしい
#o_giriのタグでネタPOSTするといいことがあるらしい#o_giriのタグでネタPOSTするといいことがあるらしい
#o_giriのタグでネタPOSTするといいことがあるらしい
 
Blend for VS2012でイロモノUIを作ろう
Blend for VS2012でイロモノUIを作ろうBlend for VS2012でイロモノUIを作ろう
Blend for VS2012でイロモノUIを作ろう
 
DevRel #10 エバンジェリストのスタートアップ方法論
DevRel #10 エバンジェリストのスタートアップ方法論DevRel #10 エバンジェリストのスタートアップ方法論
DevRel #10 エバンジェリストのスタートアップ方法論
 
漢は黙ってjQuery
漢は黙ってjQuery漢は黙ってjQuery
漢は黙ってjQuery
 
LINEスタンプの作り方
LINEスタンプの作り方LINEスタンプの作り方
LINEスタンプの作り方
 

Similar to I understand completely line api

第1回 コデアルiOSアプリ勉強会
第1回 コデアルiOSアプリ勉強会第1回 コデアルiOSアプリ勉強会
第1回 コデアルiOSアプリ勉強会
codeal
 

Similar to I understand completely line api (20)

ウェブエンジニアとしての1年目を振り返って
ウェブエンジニアとしての1年目を振り返ってウェブエンジニアとしての1年目を振り返って
ウェブエンジニアとしての1年目を振り返って
 
Swift afterbeginner
Swift afterbeginnerSwift afterbeginner
Swift afterbeginner
 
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
 
RubyMotionを1週間 触ってみた印象
RubyMotionを1週間 触ってみた印象RubyMotionを1週間 触ってみた印象
RubyMotionを1週間 触ってみた印象
 
PWAをWebサービスに導入した話
PWAをWebサービスに導入した話PWAをWebサービスに導入した話
PWAをWebサービスに導入した話
 
LIFFとの連携でさらに強力に。こんなに使えるLINEログイン
LIFFとの連携でさらに強力に。こんなに使えるLINEログインLIFFとの連携でさらに強力に。こんなに使えるLINEログイン
LIFFとの連携でさらに強力に。こんなに使えるLINEログイン
 
APIドキュメントの話 #sphinxjp
APIドキュメントの話 #sphinxjpAPIドキュメントの話 #sphinxjp
APIドキュメントの話 #sphinxjp
 
LIFFとLINEBOTを連携させてつくる飲食店検索アプリ
LIFFとLINEBOTを連携させてつくる飲食店検索アプリLIFFとLINEBOTを連携させてつくる飲食店検索アプリ
LIFFとLINEBOTを連携させてつくる飲食店検索アプリ
 
Swift afterbeginner
Swift afterbeginnerSwift afterbeginner
Swift afterbeginner
 
Python+Raspberry Piでロボット製作はじめました
Python+Raspberry Piでロボット製作はじめましたPython+Raspberry Piでロボット製作はじめました
Python+Raspberry Piでロボット製作はじめました
 
Cmujp21_node-webkit
Cmujp21_node-webkitCmujp21_node-webkit
Cmujp21_node-webkit
 
LINEDC新年LT会【LINEで個人開発を始めて1年でLAEになれた話】
LINEDC新年LT会【LINEで個人開発を始めて1年でLAEになれた話】LINEDC新年LT会【LINEで個人開発を始めて1年でLAEになれた話】
LINEDC新年LT会【LINEで個人開発を始めて1年でLAEになれた話】
 
レビューの自動化事業について
レビューの自動化事業についてレビューの自動化事業について
レビューの自動化事業について
 
レビューの自動化事業について
レビューの自動化事業についてレビューの自動化事業について
レビューの自動化事業について
 
Swiftで初アプリリリースしてみて振り返り
Swiftで初アプリリリースしてみて振り返りSwiftで初アプリリリースしてみて振り返り
Swiftで初アプリリリースしてみて振り返り
 
【デブサミ夏A5】LINE開発におけるGitHub Enterprise導入
【デブサミ夏A5】LINE開発におけるGitHub Enterprise導入【デブサミ夏A5】LINE開発におけるGitHub Enterprise導入
【デブサミ夏A5】LINE開発におけるGitHub Enterprise導入
 
今年はRubyを勉強するぞ!という方へCodeYourRubyリポジトリのご紹介
今年はRubyを勉強するぞ!という方へCodeYourRubyリポジトリのご紹介今年はRubyを勉強するぞ!という方へCodeYourRubyリポジトリのご紹介
今年はRubyを勉強するぞ!という方へCodeYourRubyリポジトリのご紹介
 
第1回 コデアルiOSアプリ勉強会
第1回 コデアルiOSアプリ勉強会第1回 コデアルiOSアプリ勉強会
第1回 コデアルiOSアプリ勉強会
 
Swift勉強会2
Swift勉強会2Swift勉強会2
Swift勉強会2
 
第1回プログラミング大学in福岡
第1回プログラミング大学in福岡第1回プログラミング大学in福岡
第1回プログラミング大学in福岡
 

I understand completely line api