見出し画像

【TwitterAPI】note記事を自動投稿するPythonコードを作ってみた

こんにちは!
分析屋の千葉です。

ブログを運営されている方はブログを投稿した際に宣伝ツイートすることが多いと思います。ブログ投稿したら自動的にツイートするPythonコードを作成したのでご紹介いたします。

直近のTwitterAPIの更新などとっつきにくい点についても触れたいと思います。

1.概要


ブログ投稿した際、弊社では以下のようなツイートを投稿しておりました。

この定期文は毎回担当者が手動で対応しておりまして、即時性や正確性が担当者に頼り切りになってしまっておりました。
短時間の業務ではありますが塵積で負担になっていたため今回自動化をすることとなりました。

自動化の範囲は投稿→投稿を確認→投稿文作成→Twitterに投稿…までとしました。

2.開発環境について


今回の開発はテストまでとし、Google Colaboratory上で行っております。

Google Colabを用いた理由としては
・フリープランなら無償で利用できるため。テストなら十分です。
・社内に共有、実行を一括で行えるのが容易のため。各自の環境に依存せずWEBで完結させたかったためになります。

今回は紹介いたしませんがColabならseleniumでのスクレイピングも利用できます。

3.note情報取得について


まず、ブログの投稿情報を取得します。
今回はnoteAPI(非公式)を利用しました。noteAPIは公式からアナウンスされていないものの一般に公開されているAPIになります。
noteのサーバーに負荷をかけるのは駄目なので、少しだけ使わさせていただきます。

まず全体像です。このコードはAPIで記事情報を取得し、jsonをpandasでデータフレームに入れ込み、日付の条件に当てはまるものだけを表示するものです。

# モジュールをインポート
import requests
import pandas as pd

#日付取得用
from datetime import datetime, timedelta

# APIを指定する
url = 
'https://note.com/api/v2/creators/bunsekiya_tech/contents?kind=note&page=1'
data = requests.get(url).json()

# contentsに格納
contents = data["data"]["contents"]

# データフレーム作成
df = pd.DataFrame(contents)

# 特定カラムに絞りコピーする
columns_for_search = ["name", "publishAt","noteUrl"]
columns_for_copy = df[columns_for_search].copy()

# 特定日付のみに絞り込む
columns_for_copy["publishAt"] = columns_for_copy["publishAt"].str[:10]

# 日付を指定する
date_range = datetime.now().date() - timedelta(days=1)


# 日付制限をかける
zyouken = columns_for_copy["publishAt"].str[:10] == date_range
columns_for_display = 
columns_for_copy[zyouken].sort_values(by="publishAt", ascending=False)


# 表示
display(columns_for_copy)

APIは以下の部分です。
分析屋ブログ(bunsekiya_tech)の記事一覧1ページの記事情報をjsonで取得し、データフレームに入れます。

# APIを指定する
url = 'https://note.com/api/v2/creators/bunsekiya_tech/contents?kind=note&page=1'
data = requests.get(url).json() 

# データフレーム作成 
df = pd.DataFrame(contents)


なお、API自体については以下noteを参考にいたしました。

このデータフレームからカラムを絞り込み、昨日投稿された記事のみにレコードを絞り込みます。
このコードではカラムを"name", "publishAt","noteUrl"の3つに絞り、"publishAt"の日付部分のみを抽出、昨日(date_range)に絞り込みます。

# 特定カラムに絞りコピーする
columns_for_search = ["name", "publishAt","noteUrl"]
columns_for_copy = df[columns_for_search].copy()

# 特定日付のみに絞り込む
columns_for_copy["publishAt"] = columns_for_copy["publishAt"].str[:10]

# 日付を指定する
date_range = datetime.now().date() - timedelta(days=1)

# 日付制限をかける
zyouken = columns_for_copy["publishAt"].str[:10] == date_range
columns_for_display = 
columns_for_copy[zyouken].sort_values(by="publishAt", ascending=False)

# 表示
display(columns_for_copy)

結果のサンプルは以下です。

4.TwitterAPI設定について

TwitterAPIは有料化しましたが23年6月時点では、APIで月に1500投稿まで無料でできます。今回は投稿のみですのでフリープランを利用します。

まずTwitterAPIの登録をし、createAPPをします。
画面は割愛しますが利用用途を入力する画面があり、内容によっては一時APIが凍結されることもあります。私はAPI作成直後にAPIが凍結されました。異議申立を直後に行うことですぐに凍結解除されました。
進めばそのまま作成できる印象ですが、UIでハマった点についてご紹介いたします。
・アプリのUser authentication settingsにて権限を「Read」から「Read and Write」にする場所
赤線の箇所より確認できます。

・各種キーの取得場所
合計4つの文字列が認証には必要です。
API Key,API Key Secretは上の緑枠、Access Token とAccess Token Secretは下の赤枠から作成、取得できます。


5.TwitterAPIを使ったコードについて

tweepyというモジュールを利用しますので、事前にpipでインストールしておきます。
colaboの場合、コードセルにはpipのみ記載し実行します。

!pip install tweepy

先程取得したアクセスキーを用いてAPI認証をし、textを投稿します。
なお、この前に加工用の文章をtoukoubunとして作成しております。

import tweepy

consumer_key = "consumer_key"
consumer_secret = "consumer_secret"
access_token_key = "access_token_key"
access_token_secret = "access_token_secret"

# 認証
client = tweepy.Client(consumer_key=consumer_key, 
consumer_secret=consumer_secret, access_token=access_token_key, 
access_token_secret=access_token_secret)

client.create_tweet(text = toukoubun)

# 認証
print(toukoubun)

6.最後に

今回はnoteの非公式APIを利用してTwitter文の素を取得、TwitterAPIで投稿するPythonコードをご紹介しました。今回は触れませんでしたが、Googleスプレッドシートや他ブログサービスのAPIを利用することで自動投稿の幅は広がりそうです。

TwitterAPIはすべて有料のイメージがありましたが、実際には少しの投稿のみであれば可能です。もう少し使いやすさや完全自動化をして活用していきたいと思います。


ここまでお読みいただき、ありがとうございました!
この記事が少しでも参考になりましたら「スキ」を押していただけると幸いです!

株式会社分析屋について

ホームページはこちら。

noteでの会社紹介記事はこちら。

【データ分析で日本を豊かに】
分析屋はシステム分野・ライフサイエンス分野・マーケティング分野の知見を生かし、多種多様な分野の企業様のデータ分析のご支援をさせていただいております。 「あなたの問題解決をする」をモットーに、お客様の抱える課題にあわせた解析・分析手法を用いて、問題解決へのお手伝いをいたします!
【マーケティング】
マーケティング戦略上の目的に向けて、各種のデータ統合及び加工ならびにPDCAサイクル運用全般を支援や高度なデータ分析技術により複雑な課題解決に向けての分析サービスを提供いたします。
【システム】
アプリケーション開発やデータベース構築、WEBサイト構築、運用保守業務などお客様の問題やご要望に沿ってご支援いたします。
【ライフサイエンス】
機械学習や各種アルゴリズムなどの解析アルゴリズム開発サービスを提供いたします。過去には医療系のバイタルデータを扱った解析が主でしたが、今後はそれらで培った経験・技術を工業など他の分野の企業様の問題解決にも役立てていく方針です。
【SES】
SESサービスも行っております。

この記事が参加している募集