ユーザ用ツール

サイト用ツール


memo:2019:08:2019-08-16

API経由でpocketに投稿した記事を取得

アプリケーション登録

まずはアプリケーション登録をする

記事が読めればいいので,permissionsはRetrieve にした.登録すると,CONSUMER KEY が入手できる.

REQUEST TOKENを入手する

$ curl -H "Content-Type: application/json; charset=UTF-8" -X POST \
   https://getpocket.com/v3/oauth/request \
   -d '
{
  "consumer_key" : "XXXX-XXXXXXXXXXXXXXXXXXXXXXXX",
  "redirect_uri":"http://matoken.org/"
}
'

結果

code=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXX

アプリケーションをアカウントに紐付ける

ウェブブラウザで 'https://getpocket.com/auth/authorize?request_token=<REQUESTTOKEN>&redirecturi=http://matoken.org/' にアクセスしてアカウントにリクエストを許可する.urlは適当.

アクセストークンを入手する

$ curl -H "Content-Type: application/json; charset=UTF-8" -X POST \
https://getpocket.com/v3/oauth/authorize \
-d '
{
  "consumer_key":"<CONSUMER_KEY>",
  "code":"<REQUEST_TOKEN>"
}
'

結果

access_token=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXX&username=user%40example.com

投稿を取得する

application/json で求める.とりあえず1件だけ(“count”:“1”)

$ curl -H "Content-Type: application/json; charset=UTF-8" -X POST \
https://getpocket.com/v3/get -d '
{
  "consumer_key":"<CONSIMMER_KEY>",
  "access_token":"<ACCESS_TOKEN>",
  "count":1
}
' | jq
{
  "status": 1,
  "complete": 1,
  "list": {
	"2692971736": {
	  "item_id": "2692971736",
	  "resolved_id": "2692971736",
	  "given_url": "https://www.patreon.com/posts/29180933",
	  "given_title": "DUVET | 1041uuu on Patreon",
	  "favorite": "0",
	  "status": "0",
	  "time_added": "1565885008",
	  "time_updated": "1565885011",
	  "time_read": "0",
	  "time_favorited": "0",
	  "sort_id": 0,
	  "resolved_title": "",
	  "resolved_url": "https://www.patreon.com/posts/29180933",
	  "excerpt": "",
	  "is_article": "0",
	  "is_index": "0",
	  "has_video": "0",
	  "has_image": "0",
	  "word_count": "0",
	  "lang": "",
	  "domain_metadata": {
		"name": "Patreon",
		"logo": "https://logo.clearbit.com/patreon.com?size=800",
		"greyscale_logo": "https://logo.clearbit.com/patreon.com?size=800&greyscale=true"
	  },
	  "listen_duration_estimate": 0
	}
  },
  "error": null,
  "search_meta": {
	"search_type": "normal"
  },
  "since": 1565886741
}

application/x-www-form-urlencoded で求める

$ curl -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" -X POST https://getpocket.com/v3/get -d \
  "consumer_key=<CONSUMER_KEY>&access_token=<ACCES_TOKEN>&state=all&sort=oldest&detailType=symple&since=`date -d'1days ago' +%s`" | jq .
  • state=all : 全ての投稿形式(既読未読の両方)
  • sort=oldest : 古いものから順に
  • detailType=simple : 基本的な情報
  • since=date -d'1days ago' +%s : 指定したUNIX Time以降の記事を取得.取得する開始UNIX TimeをGNU coreutilsのdate commandで過去1日(-d'1days ago')時点のUNIX Time(+%s)を取得して指定

毎日前日分のpocket投稿titleとurlをこのDokuwikiに書き込み(Markdown形式)

$ sudo -u www-data crontab -l | grep wiki
0 0 1 * *       mkdir -p /var/lib/dokuwiki/farm/wiki.matoken.org/data/pages/memo/`date +\%Y/\%m`
1 0 * * *       curl -s -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" -X POST https://getpocket.com/v3/get -d "consumer_key=<SOCTOMER_KEY>&access_token=<ACCESS_TOKEN>&state=all&sort=oldest&detailType=simple&since=`date -d'1days ago' +\%s`" | jq -r '.list[] | [.given_title,.given_url] | @csv' | sed -e 's/^"/* [/' | sed -e 's/","/](/' | sed -e 's/"$/)/' | sed -e 's/^\[]/\[null]/' | sed '1s/^/\n/' >> /var/lib/dokuwiki/farm/wiki.matoken.org/data/pages/memo/2019/08/`date +\%F`.txt

1行目

  • 0 0 1 * * : 毎月1日の00:00に実行
  • mkdir -p /var/lib/dokuwiki/farm/wiki.matoken.org/data/pages/memo/date +\%Y/\%m`` : 月のディレクトリを掘る
  • 1 0 * * * : 毎日 00:01 に実行

2行目

  • jq -r '.list[] | [.given_title,.given_url] | @csv' : pocketからの結果からtitleとurlを抜き出してcsv形式で出力
  • sed -e 's/^"/* [/' | sed -e 's/","/](/' | sed -e 's/"$/)/' | sed -e 's/^\[]/\[null]/' : markdownのリンクに変換
  • sed '1s/^/\n/' : 先頭行を空けないとmarkdownを認識しないようなので改行を入れる
  • /var/lib/dokuwiki/farm/wiki.matoken.org/data/pages/memo/2019/08/date +\%F.txt : 保存先,memo:2019:08:2019-08-16になる
    ※date +\%Y/%m/%Fに差し替える

明日動けば成功

コメント

コメントを入力. Wiki文法が有効です:
165 +5 = 
 
memo/2019/08/2019-08-16.txt · 最終更新: 2019/08/17 11:50 by matoken