[テンプレートあり]無料でPocketの記事をランダムにSlackに送る on GAS
はじめに
ブックマークサービスにPocketを利用している。Pocketのリマインダ機能は多くの投票が寄せられているが、いまのところ実装されていない。では、つくろう。
サーバの保守は考えたくないし、設定などを簡単に変更するためにスプレッドシート+GASで管理しよう、と思った。
できることはシンプル。
- 時間をトリガにして、Pocketに保存されている記事をSlackに送る
- GASなので、メール送信も簡単にできる
- 自分一人が利用する
Slackでの表示
細かな情報はいくらでも変えられるけど、自分は以下のような構成にしている。
競合との比較
自分で作るにあたり、類似サービスとしてPocketRocketなるものを利用したが、以下の点が不服だった。以下の要件でよければ、PocketRocketを利用したほうがいい。
- メールで送られてくる
- 1日1件のみ
- 送られる情報は記事タイトルのみ
- 送られた記事はPocketから削除される
作り方
テンプレつくったので、ここからコピーすると楽。
テンプレのスプレッドシート
必要なスクリプトは設定しているので、赤いセルの部分に、以下の情報を入れると動く。
- PocketのConsumer Key, Request Token
- Pocketに保存されているデータの総量 (多めに入れる分には問題ない)
- Slackのincoming webhookのURL, channel名
Pocket側の準備
PocketでAppを作成
Pocket: Create an Application からアプリケーションを作成。
Permissionsは Retrieve
, Platformは Web
に設定。
設定したらconsumer_keyが発行されるのでメモして、access tokenの取得へ進む。
Pocketのaccess_tokenを取得
自分のアカウントだけでいいから、curlだけですませる。
Pocket Developer Program: Pocket Authentication API: Documentation
request tokenの取得
$ curl -H "Content-Type: application/json; charset=UTF-8" -X POST \
https://getpocket.com/v3/oauth/request \
-d '
{
"consumer_key" : "<CONSUMER_KEY>",
"redirect_uri":"http://localhost:8000"
}
'
> code=xxxxx-xxxxxx-xxxxx
アプリケーションの認可
ブラウザで自分の作成したプロジェクトを認可する。
https://getpocket.com/auth/authorize?request_token={code}&redirect_uri=localhost:8000
Pocket: 接続済みのサービスとアプリケーション に自分が作成したアプリケーションが表示されていればOK.
access tokenの取得
curl -H "Content-Type: application/json; charset=UTF-8" -X POST \
https://getpocket.com/v3/oauth/authorize \
-d '
{
"consumer_key":"<CONSUMER_KEY>",
"code":"<code>"
}
'
> access_token=xxxxxxx-xxxxxx-xxxxxxxx&username=tomoyamachi
access_tokenが取得できた。
動作テスト
$ curl -H "Content-Type: application/json; charset=UTF-8" -X POST \
https://getpocket.com/v3/get -d '
{
"consumer_key":"<CONSUMER_KEY>",
"access_token":"<access_token>",
"count":1
}
'
{
"status": 1,
"complete": 1,
"list": { (略) },
"error": null,
"search_meta": {
"search_type": "normal"
},
"since": 1525232072
}
Slackのincoming webhook URLを取得
Slack > Incoming WebHooks でWebHookを作成して、URLを取得する。
GASの設定
シートに定数を記入
pocketのretrieve APIはランダムな取得に対応していないので、以下の手順でランダム化している。
- アイテムを1つ選ぶ
- そのあとのn件を取得する
- n件の中から、さらにm件に絞る
whole item count
: pocketに保存されているアイテム数。1でアイテムの先頭を選ぶときに利用。
なお、ここの数が大きくても、アイテムがなければ再度抽選が走るので、あらかじめ大きな値を設定しておく。5年くらい利用したら、これくらいになるよね、くらいの数値でいいと思う。
fetch item count
: 2で1度に取得するアイテム数。
whole item count
よりも小さい値にする。
send item count
: 送信するアイテム数。
取得したアイテムの中からランダムで送信するものを選ぶ。
トリガーを設定
【GoogleAppsScript】通知時間を詳細に指定する - Qiita などを参考にトリガーを作成する。
自分は6時間に1回実行している。
自分が気にしたところ
- リンクURLは、Pocketのキャッシュデータがあるページへのリンク
- すでにリンクが切れている情報も表示できるため
- アイテムの削除までの導線が短くなるため
- Slackに記事のExerptも表示
- 本当はタグも表示したかったけど、APIに入っていなかった
- 日時表示の部分はMomentのライブラリを利用
まとめ
GAS便利。
Author And Source
この問題について([テンプレートあり]無料でPocketの記事をランダムにSlackに送る on GAS), 我々は、より多くの情報をここで見つけました https://qiita.com/tomoyamachi/items/9fa360967f1d1ab482a9著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .