speakerdeckのスライドをpdfで保存するCLIコマンドを作った
pocketに保存したspeakerdeckのスライドをpdfでダウンロードしてローカルに保存するコマンド
won't read it laterの頭文字をとって「wril」です。
なぜ作った?
端的にいうとspeakerdeckが重くてkindle fire HD7と俺の寿命がマッハなので、いったんpdfで保存し、kindleパーソナルライブラリに突っ込もうとしたって話
いや、ほんと、speakerdeckって重くないですか? エアロバイク漕ぎながらpocketに入れた記事を消化するんですが、slideshareは普通に見られるのに、speakerdeckは重くてまともにスライドのページがめくれないんですよね。
めくれないどころか、kindle fire HD7がフリーズして再起動したんですよね。
おかげでspeakerdeckのスライドが全然消化できないので、技術で殴ろうとしたという話
仕組み
- pocketのapiを叩いて、「speakerdeck」という文字列が含まれるエントリを検索
- 上記検索結果からエントリのURLにアクセス
- アクセスしたspeakerdeckのページから、PDFのダウンロードリンクをスクレイピング
- 上記pdfリンクにアクセスしてダウンロード
技術的に特におもしろいところはない。
pdfをkindleパーソナルライブラリにアップロードするところは今のところsento-to-kindleアプリで手動アップロードしている
使い方
以下でコマンドをビルド
npm install npm run build
pocketのコンシューマキー、アクセストークンを環境変数に設定
export POCKET_CONSUMER_KEY=xxxx export POCKET_ACCESS_TOKEN=xxxx
以下のように実行
node dist/main.js -d /tmp/pdf_dl -c 10 -s unread
オプションで指定しているのはそれぞれ
- ダウンロード先ディレクトリ
- ダウンロード数
- pocketのアーティクルのstateの指定
ちなみにpdfのタイトルはURLをスラッシュ区切りにして、末尾のパスを使っている。 これだと同名のスライドがあった場合、上書きされてしまうので、スライド著者のspeakerdeckのアカウント名を先頭に入れて一意性を担保したほうがいいかもしれない。
終わりに
とりあえず、pocketに保存したspeakerdeckのページからスライドをpdfダウンロードして、kindleパーソナルライブラリに保存するという目的は達成できている。
あとはページング対応入れたらいいかなという感じ
というか、当初IFTTTとAWS Lambdaと組み合わせてピタゴラスイッチ化するつもりだったんだけど、途中でめんどくなってやめた。CLIコマンドならnode.jsである必要はないので、golangで書き直すかも。