6
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 1 year has passed since last update.

🌟LINE DC🌟 LINE Developer CommunityAdvent Calendar 2022

Day 21

connpass新着イベントをLINE BotにEverything It's you してみた!

Last updated at Posted at 2022-12-21

connpass API

なるものがあります。というわけで、api たたいて LINEDC の新着イベント通知Botを作ってみました。
アドベントカレンダーに空きがあり、どうしても埋めたい衝動に駆られ、何かネタをと思い事前に仕込んでおきました・・笑
connpass api 初めてたたいてみたし、一石二鳥です!

動画は動いている様子をテスト実行したものです。
GASを実行するとスプレッドシートにconnpassイベント情報が3件取得され、それがBotに通知されている様子です。

ということで下記アドベントカレンダー21日目の記事でもあります!

ざっくり構成

image.png

API の詳細

https://connpass.com/api/v1/event/ にリクエスト投げるとそれなりに情報を取得でるっぽい。

※過度な検索やクローリングに対しては、アクセス制限を施す可能性があります。robots.txt を遵守してください。

とありますので、 robots.txt を確認します。

robots.txt をあまり意識したことがなかったのでちょうど良い理解にもなりました。

robots.txtって?

robots.txt ファイルとは、検索エンジンのクローラに対して、サイトのどの URL にアクセスしてよいかを伝えるものです。

とあります。クロールのお作法が書いてあるようです。
connpassサイトの robots.txt は以下のようになってます。

connpassのrobots.txt
User-agent: *
Crawl-delay: 5
Allow: /
Disallow: /series/optout/
Disallow: /account/
パラメータ 用途 今回の例では
User-agent ルールの適用対象 * なので全ユーザー(全てのクローラ)
Crawl-delay 次のクロールまでの間隔(秒) 5秒間隔でクロール
Allow クロールを許可するディレクトリまたはページで、ルートドメインからの相対パス ルート以下を許可
Disallow クロールを禁止するディレクトリまたはページで、ルートドメインからの相対パス /series/optout/と/account/ は拒否

ということで、最低でも5秒はあけてリクエストすることにします。(今回の場合は1日に1回だけですが・・)
リクエスト先も https://connpass.com/api/v1/event/ だけですね。

LINEDC グループID を取得

connpass api を見ると、グループに紐づいたイベントを検索できるようですので、まずは LINEDC の グループIDを調べます。

パラメータ 項目名 説明
series_id グループID 整数 グループ毎に割り当てられた番号で、ひもづいたイベントを検索します。複数指定可能です

ダッシュボードなどから分かるのかな?と思ったのですが、それっぽいIDを見つけられなかったので、とりあえず LINEDC のイベントを1件取得してみました。

取得対象のイベントは以下です。まだ見てない方は是非見てみてください!

LINEDC アドベントカレンダーの1日目の記事でもありますので、こちらも参考に。

上記イベントIDは URL より 265838 ということがわかりますので、GET リクエストを投げてみます

https://linedevelopercommunity.connpass.com/event/265838/

GET https://connpass.com/api/v1/event/?event_id=265838

レスポンス

(ここをクリック)
{
  "results_start": 1,
  "results_returned": 1,
  "results_available": 1,
  "events": [
    {
      "event_id": 265838,
      "title": "たった30分でできる!?サンタから毎日メッセージが届くLINE Botを作るチャレンジ",
      "catch": "今年のクリスマスは何しようか考えてる親御さんにオススメ by スペシャルマン & マッシュルーマン",
      "description": "(略)",
      "event_url": "https://linedevelopercommunity.connpass.com/event/265838/",
      "started_at": "2022-11-28T19:00:00+09:00",
      "ended_at": "2022-11-28T20:00:00+09:00",
      "limit": null,
      "hash_tag": "LINEDC",
      "event_type": "participation",
      "accepted": 37,
      "waiting": 0,
      "updated_at": "2022-11-27T22:49:05+09:00",
      "owner_id": 485331,
      "owner_nickname": "linedc_jp",
      "owner_display_name": "linedc_jp",
      "place": "オンライン",
      "address": "オンライン",
      "lat": null,
      "lon": null,
      "series": {
        "id": 7348,
        "title": "LINE Developer Community",
        "url": "https://linedevelopercommunity.connpass.com/"
      }
    }
  ]
}

上記レスポンスの以下の部分

"series": {
        "id": 7348,
        "title": "LINE Developer Community",
        "url": "https://linedevelopercommunity.connpass.com/"
      }

series id 7348 がLINEDCのグループIDになります。グループのタイトルやURLも取得できてますね。
グループではなく、内部ではシリーズというようですね。

LINEDC のイベントを取得

細かいパラメータは connpass api を参照いただくとして、開催日が直近3件のイベントを取得してみました。 order=2 としているのは、開催日順 に取得したいからです。

GET https://connpass.com/api/v1/event/?series_id=7348&count=3&order=2

レスポンス

(ここをクリック)
{
  "results_start": 1,
  "results_returned": 3,
  "results_available": 189,
  "events": [
    {
      "event_id": 265942,
      "title": "【約3年ぶりオフライン会場有り!】LINE Developer Community忘年LT大会",
      "catch": "LINE開発者全員集合!2022年アウトプットの総決算に!登壇者募集中!",
      "description": "(略)",
      "event_url": "https://linedevelopercommunity.connpass.com/event/265942/",
      "started_at": "2022-12-02T19:00:00+09:00",
      "ended_at": "2022-12-02T21:00:00+09:00",
      "limit": null,
      "hash_tag": "LINEDC",
      "event_type": "participation",
      "accepted": 73,
      "waiting": 0,
      "updated_at": "2022-12-02T19:35:16+09:00",
      "owner_id": 485331,
      "owner_nickname": "linedc_jp",
      "owner_display_name": "linedc_jp",
      "place": "コンフォート新宿",
      "address": "東京都新宿区新宿4-3-25 TOKYU REIT新宿ビル 7階",
      "lat": "35.689352900000",
      "lon": "139.704340400000",
      "series": {
        "id": 7348,
        "title": "LINE Developer Community",
        "url": "https://linedevelopercommunity.connpass.com/"
      }
    },
    {
      "event_id": 265838,
      "title": "たった30分でできる!?サンタから毎日メッセージが届くLINE Botを作るチャレンジ",
      "catch": "今年のクリスマスは何しようか考えてる親御さんにオススメ by スペシャルマン & マッシュルーマン",
      "description": "(略)",
      "event_url": "https://linedevelopercommunity.connpass.com/event/265838/",
      "started_at": "2022-11-28T19:00:00+09:00",
      "ended_at": "2022-11-28T20:00:00+09:00",
      "limit": null,
      "hash_tag": "LINEDC",
      "event_type": "participation",
      "accepted": 37,
      "waiting": 0,
      "updated_at": "2022-11-27T22:49:05+09:00",
      "owner_id": 485331,
      "owner_nickname": "linedc_jp",
      "owner_display_name": "linedc_jp",
      "place": "オンライン",
      "address": "オンライン",
      "lat": null,
      "lon": null,
      "series": {
        "id": 7348,
        "title": "LINE Developer Community",
        "url": "https://linedevelopercommunity.connpass.com/"
      }
    },
    {
      "event_id": 265087,
      "title": "【ハンズオン】Flutter Web X Google App ScriptでLIFFアプリを作ろう",
      "catch": "",
      "description": "(略)",
      "event_url": "https://linedevelopercommunity.connpass.com/event/265087/",
      "started_at": "2022-11-24T19:00:00+09:00",
      "ended_at": "2022-11-24T21:00:00+09:00",
      "limit": null,
      "hash_tag": "LINEDC",
      "event_type": "participation",
      "accepted": 95,
      "waiting": 0,
      "updated_at": "2022-11-24T19:05:14+09:00",
      "owner_id": 485331,
      "owner_nickname": "linedc_jp",
      "owner_display_name": "linedc_jp",
      "place": "オンライン",
      "address": "オンライン",
      "lat": null,
      "lon": null,
      "series": {
        "id": 7348,
        "title": "LINE Developer Community",
        "url": "https://linedevelopercommunity.connpass.com/"
      }
    }
  ]
}

この記事投稿時点の直近3件は以下です。

レスポンスと一致してますね。

ということで、あとは

  1. LINE Bot 作成(Developers console)
  2. Google Spreadsheet 作成
  3. GAS実装&トリガー設定

です。 この辺りは参考になりそうな記事がたくさんありますので、そちらを参考にしつつ補足程度に。

LINE Botの準備(Developers Console)

以下のDevelopers Console にログインし、LINE Bot の準備をします。

LINE Bot (Messaging API) の設定をしていきます。以下の記事に手順がありますので、こちらを参考に。

  • プロバイダーとチャネルを作成
  • ユーザーIDをメモ
  • チャネルアクセストークンを発行しメモ
  • Bot をお友達登録

今回、ユーザーがBotにメッセージを送信してBotが応答を返すようなことはしないため、Webhook の設定や応答メッセージの設定などは不要です。ユーザーIDとチャネルアクセストークンをメモしておくだけです。

Google Spreadsheet 作成

今回、デイリーのトリガーにて connpass に新しいイベントが登録されているか?を取得します。
その管理用に Spreadsheet を使っています。この辺りは LINE x Spreadsheet x GAS の手軽さですね。

こんな感じのスプレッドシートを用意します。

image.png

image.png

  • connpass シート(特に変更は不要)
    • 1行目は項目名で、2行目以下に取得したイベント情報が追加されます
  • setting シート(要設定)
    • LINEのチャネルアクセストークンやconnpassグループIDなどをセットします
    • 前述の LINE Botの準備(Developers Console) を参考に

GAS実装

ざっくり仕様・処理として

  • connpass api を叩いて新着イベント3件を取得
  • Bot に一度も通知していなければ、新着イベントとして通知
  • 明日開催予定のイベントがあれば、明日開催イベントとして通知
  • 過去開催のイベントはスプレッドシートから削除&通知もしない
  • Bot にはカルーセル形式で通知
  • イベントのサムネイルが欲しかったので、各イベントページのHTMLをパースしてサムネイル(og:image)を取得
    • 下図の通り Parser ライブラリを使ってパースしてみました。
      image.png
  • トリガーは getLineDCEvents 関数を指定します
    image.png

ソースは以下にアップしてます

ということで

connpass api 使ってサクッとLINEに通知できるのはいいなぁと思いました。今回の内容をLINEDCのイベントでやるのもありかな??興味ある方は是非以下を or Twitter フォローいただければと思います♪

6
2
0

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
6
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?