share facebook facebook twitter menu hatena pocket slack

2018.11.21 WED

PythonでQiitaに予約投稿できるツールをさくっと作ってみた(使い方編)

甲斐 甲

WRITTEN BY 甲斐 甲

概要

平日欠かさずQiitaに投稿するのがルーティンワークになって、下書きから公開投稿するのが面倒になったので、予約投稿できるツールを作ってみました。

仕様検討1h、実装2h、環境構築と検証に3hくらいでした。お手軽です^^

Qiitaの中の人!実装はよ!はよ!

使い方

ツールの環境構築がすでに完了している前提での使い方となります。
ツールの環境構築方法は別で記事にする予定です。(予定は未定

ソースはGitHubにアップしていますので、気になる方はご参考ください。
https://github.com/kai-kou/qiita-reservation-post

投稿したい記事をQiitaで限定共有投稿する

普段投稿しているとおりに、タイトル、タグ、本文を入力して、限定共有投稿します。ここでは[Twitterで共有]しないでおきます。

限定共有投稿した記事に投稿したい日時をコメントする

限定共有投稿した記事に予約投稿したい日時をコメントします。プレフィックスに「予約投稿:」が必須、分単位の指定は「00」のみ受け付けます。(設定で変更可能です

これで、コメントで指定した日時に記事が公開投稿されます。
お手軽ですね^^

要件と仕様

自分で利用するツールですが、実装前に要件と仕様をまとめていました。一部、未実装なものもありますが、またそのうちに。

要件

  • 限定公開投稿(下書き)から自動で公開投稿したい
  • 投稿日時は公開投稿したタイミングが良い
  • 限定公開投稿した記事は公開投稿後はいらない
  • 記事コメントで投稿日時を指定したい
  • 公開投稿したらTwitterにツイートしたい
    • 記事コメントでツイート内容を指定したい
  • 公開投稿したらSlackで通知したい
  • 公開投稿前に記事本文の一部を指定どおりに置換したい
    • 公開したらまずい文字列があると困るから

仕様

  • Cronなどを利用して、1時間に1度処理が実行される
  • Qiita API v2を利用する
  • Qiitaのアクセストークンを利用して記事を取得・投稿する
    • 下書きはAPIで取得できないので、限定共有投稿を利用する
  • 限定共有投稿の記事コメントから予約投稿を指定した文字列を取得する
    • 「予約投稿:2018/11/01 10:00」
    • プレフィックスは環境変数で指定できる
  • 記事コメント指定の日時と現在日時が一致したら記事を公開設定で投稿する
  • 投稿前に、文字列の置換指定があれば置換する(未実装)
  • 投稿後に、元の記事を削除する
  • 投稿後に、Twitterのアクセストークンがあればツイートする
    • ツイート内容はQiitaでツイートされるのと同じ内容とする
    • 記事コメントにツイート指定があればそれを含めてツイートする(未実装)
      • 「tweet:ツイート内容」(未実装)
  • 投稿後に、SlackのWebHookUrlがあればSlackに通知する

制限・前提

  • 予約投稿は「年月日時」で指定する
    • 1時間ごとにチェックを走らせるため
  • 実行環境はAWS LambdaかGoogle Cloud Functionsとする
    • 現時点(2018/11/05)でAWS Lambdaに対応
  • 予約投稿のチェックタイミングは各クラウドサービスで指定する
  • 各アクセストークンは環境変数で指定する
  • 文字列置換は環境変数で指定する
  • 利用者が自前で環境設定できる前提とする

環境構築に参考にした記事など

環境構築の詳細は別で記事にする予定です。(予定は未定

ソースをGitHubにアップしていますので、気になる方はご参考ください。
https://github.com/kai-kou/qiita-reservation-post

今回参考にさせてもらった記事などは以下となります。感謝!

Qiita API

【まとめ】Qiita API ライブラリ/ラッパー
https://qiita.com/suin/items/857f839e894f5da787f8

Qiita API v2のPythonラッパー実装した
https://qiita.com/petitviolet/items/deda7b66852635264508

Slack

Python3でslackに投稿する
https://qiita.com/shtnkgm/items/4f0e4dcbb9eb52fdf316

Twitter

Python3で簡単にtwitterに投稿する
https://qiita.com/shtnkgm/items/cc55be0e09b484ce8e43

AWS Lambda

Serverless FrameworkでAWS Lambda関数を作成する
https://qiita.com/Esfahan/items/736d09f732fa619d2410

Serverlessで任意のディレクトリ配下に、関数毎にディレクトリを切ってソースを配置する with webpack building
https://qiita.com/wara_be/items/f3ec38e5be6bdea7c79d

AWS Lambdaのタイムゾーン変更
https://qiita.com/nullian/items/39ecf1f6d0194b72e8e6

まとめ

Qiita API v2のラッパーを実装されている方がおられたので、利用させてもらい、さくっと実装することができました。

個人的にはこれで、下書きの10記事制限を気にすることなく、ルーティンで記事公開していた手間がだいぶと省けるようになったのでだいぶ満足です^^

メリットとして、限定共有公開を公開投稿までに挟むので、記事内容の見直しができる点があります。
組織に所属していてレビューが必要な場合にもいいですよね。
それでも見逃すときには見逃すのでご注意ください(本記事でキャプチャした記事で1敗

元記事はこちら

PythonでQiitaに予約投稿できるツールをさくっと作ってみた(使い方編)

甲斐 甲

甲斐 甲

2018/7にJOIN。 最近の好みはサーバレスです。なんでもとりあえず試します。

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。