AI&自動化ツール

MakeとPythonで作るX(Twitter)自動ニュース配信

SANA

こんにちは。今回は「MakeとPythonを使ってX(旧Twitter、以降はXと呼びます)でニュースを自動配信する方法」について解説します。

今回は他の記事と比べると少し重たい作業になっています。ただ、1度乗り切れば応用し放題の内容となってますので、頑張って乗り切りましょう!

先日、X自動ポストの構築手順を公開しました。こちらは『Make』(自動化ツール)と各APIのみを使ったシンプルなシステムとなっています。※今現在も元気に稼働してます。

【2024年版|基本無料】 X(旧Twitter)Bot作成の完全ガイド
【2024年版|基本無料】 X(旧Twitter)Bot作成の完全ガイド

そんな中、最近なのですがConoHa VPS(レンタルサーバ)を契約しました。「自分が自由に遊べる環境が欲しかった。」と、なんとなく思ったのがきっかけです。

せっかく、自分専用のサーバを持ったのでWebサーバ構築してプログラミングをちょいちょいやり始めるようになりました。(ほんと久々。)

【30分で完了】ApacheによるWebサーバ構築手順
【30分で完了】ApacheによるWebサーバ構築手順
【詳説】PythonでChatGPTを呼び出して独自APIを公開するまで
【詳説】PythonでChatGPTを呼び出して独自APIを公開するまで

WebサーバにHTTP経由でアクセスできるようになって、ふと思ったのが

Make(自動化ツール)とPython組み合わせたら面白いサービス作れそう!

と考え、その第一弾としてXを使ったニュース自動配信サービスを構築することにしました。

ただ、、、今回のシステム構築をするにあたってWebサーバが必須となります。(MakeとWebサーバをHTTP経由で通信させます)。

自分でサーバを買って構築するのも楽しいのですが、メンテナンス作業の手間を考えるとレンタルサーバがオススメです。中でも、ConoHa VPSの最安プランは月額300円程度のレンタル料金となっており、私自身も安く、快適にサーバを使わせてもらってます。

下のボタンからのお申し込みで1ヶ月間無料となりますので、是非この機会に利用してみてください。

こちらのボタン限定! 最大1ヶ月無料

それでは始めていきましょう。

前提条件

今回開発を行った環境は以下となります。

<接続先VPSサーバ情報>
サーバ:ConoHa VPS
OS:Ubuntu22.04
Python:3.10.12
Flask:3.0.2
Apache:2.4.52

ロードマップ

ゴールまでのロードマップを以下に示します。STEP1〜STEP4までは過去記事で解説済みなのでリンクからご確認いただければと思います。今回はSTEP5から丁寧に説明していきます。

ConoHa VPSの契約

Webサーバ構築するためのサーバを契約します。

こちらのボタン限定! 最大1ヶ月無料
ConoHa VPSへのリモートアクセス設定

自身の端末からサーバへSSH経由でアクセスできるよう設定をします。

【30分で完了】ConoHa VPSへSSH接続する方法を解説
【30分で完了】ConoHa VPSへSSH接続する方法を解説
【30分で完了】SSH公開鍵認証の設定方法を解説
【30分で完了】SSH公開鍵認証の設定方法を解説
プログラミング環境準備

今回はVSCode(コーデエディタ)とConoHa VPSを接続してを使用してプログラムを書きます。ご自身のPC内でプログラミングができて、ファイルをリモート転送できるのであれば特に必要ない工程となります。

VSCodeのSSH接続とGitHub連携手順|ConoHa VPS
VSCodeのSSH接続とGitHub連携手順|ConoHa VPS
【20分で完了】『venv』を使うPython複数バージョン管理
【20分で完了】『venv』を使うPython複数バージョン管理
Webサーバ構築

ConoHa VPS内にWebサーバを立ち上げて、HTTP通信を可能にします。また、プログラム資材をWebサーバへ配置する外部からアクセスできるように

【30分で完了】ApacheによるWebサーバ構築手順
【30分で完了】ApacheによるWebサーバ構築手順
各種アカウントやAPIキー情報の取得

・『Make』アカウントの取得

・『X』bot用アカウント及びAPIキー情報の取得

・『News API』APIキー情報の取得

コード実装〜Webサーバへデプロイ

今回、Flaskを使ってPython使ってコードを書いていきます。その後、書いたコードをWebサーバへデプロイしてHTTP経由でアクセスできるようにします。

【詳説】PythonでChatGPTを呼び出して独自APIを公開するまで
【詳説】PythonでChatGPTを呼び出して独自APIを公開するまで
『Make』シナリオの開発

『HTTP』モジュールを使って『Make』からWebサーバへHTTP経由でアクセスしてニュースの情報を取得します。取得した結果を『X』モジュールに連携してポストします。

各種アカウントやAPIキー情報の取得

事前準備はめんどくさいのですが、1度準備をしてしまえばあとはずっと使いまわしができるのでサクッとやってしまいましょう。

『Make』アカウントの取得

今回も『Make』を使ってシステム構築をしていきますのでアカウント作成してください。

こちらからの登録で1ヶ月間Proプランが無料※

※上記から登録すると、今なら1ヶ月間無料でProプランを利用できます。お試しにはちょうど良いかと思います。また、課金登録をしない限り、料金が請求されることはありませんのでご安心ください

『X』bot用アカウント及びAPIキー情報の取得

下記の記事の記事の事前準備セクションに「Bot用のアカウント取得方法」及び「APIキー取得方法」について解説してますのでご確認ください。

【2024年版|基本無料】 X(旧Twitter)Bot作成の完全ガイド
【2024年版|基本無料】 X(旧Twitter)Bot作成の完全ガイド

『News API』APIキー情報の取得

今回、ニュースを取得するAPIとして『News API』を使います。News APIは世界中のさまざまなニュースソースから最新のニュースがリアルタイムで提供されており、キーワード、日付、言語、国に基づいてニュース記事を検索することが可能です。

https://newsapi.org/

上記のサイトからアカウント登録するだけで簡単にAPIキーを取得できるのできます。

コード実装〜Webサーバへ公開

保守性と再利用性向上性のため、「APIアクセス層」「ロジック層」「エンドポイント層」を分けて開発します。

APIアクセス層」・・公開されてるAPIを活用してデータを取得する部分

ロジック層」・・APIアクセス層から取得したデータを加工する部分

エンドポイント層」・・ユーザーからのAPIリクエストを受付けて、インプットデータをロジック層へ連携する部分

詳しくは以下の記事を参照してください。

【詳説】PythonでChatGPTを呼び出して独自APIを公開するまで
【詳説】PythonでChatGPTを呼び出して独自APIを公開するまで

ソースについては量の多さから部分的に公開します。ソースの流れだけ理解していただければ良いかと思います。

APIアクセス層

APIアクセス層は「News API」から提供されるAPIを利用して情報取得します。「News API」のAPIに関するパラメータは以下の通りです。

パラメータ説明
apiKeyアクセスに必要なAPIキー。
q検索クエリ。記事の中で検索されるキーワードやフレーズ。
searchInキーワード検索対象のフィールド (title, description, content)。
sourcesニュースソースのID。コンマ区切りで複数指定可能。
domains特定のドメインからの記事を検索。コンマ区切りで複数指定可能。
excludeDomains検索結果から除外するドメイン。コンマ区切りで複数指定可能。
from検索対象の開始日。
to検索対象の終了日。
language記事の言語。日本語の場合は「ja」。
sortBy記事のソート順。
pageSize1ページあたりの記事数。最大100。
pageページ番号。
「News API」のAPIパラメータ一覧

コードは以下の通りです。基本的にAPIパラメータ一覧を基にURLを組み立ててますが、使用しないパラメータは省いています。また、「@handle_request_errors」の部分はAPI接続周りの例外エラー発生時のエラーを分類するためのデコレーター※を付与している。

※デコレーターはPythonにおいて関数やメソッドに新しい機能を動的に追加できます。既存のコードを変更する必要がありません。(チェック処理の追加etcに使えます)

APIアクセス層

ロジック層

ロジック層では「News API」のAPIから取得したニュースのリストから既に削除されてしまっている記事を取り除く作業をします。ブラウザに404エラーを返してくれればよいのですが、ニュースサイト側でエラーハンドリングされてることが大半なのでそれらの記事を除外する必要があったわけです、、(なんかもっと良い方法があれば、、、と思ったのですが。)

ロジック層

エンドポイント層

エンドポイント層ではユーザーからの「/news」のURLをトリガーにして「def news():」を動かします。リクエストから取得したパラメータをプログラム内で変数に格納し、ロジック層の部品へ連携します。

エンドポイント層

Webサーバへのデプロイ

実装が終わったのでのWebサーバへデプロイします。詳しい方法については以下の記事で丁寧に解説していますので「Webサーバへのデプロイ」の章を参照してください。諸々の設定が終われば「/var/www/app」配下にPythonファイルを配置してApacheのサービス再起動をするだけです。

【詳説】PythonでChatGPTを呼び出して独自APIを公開するまで
【詳説】PythonでChatGPTを呼び出して独自APIを公開するまで

『Make』シナリオの開発

始めに『Make』の完成図を示します。

大まかな流れを示すと以下のようになります。

① 『HTTP』モジュールを使ってWebサーバへアクセスしてニュース情報を取得

② 取得した情報をリスト化

③ 乱数を使ってリスト化した情報からニュースを選択

④ 選択した情報をXへポスト

各モジュールの設定値について説明します。

『HTTP』モジュール

『Make』から<Make a request>を使ってHTTP経由でWebサーバへアクセスします。

今回はPOST通信でWebサーバへアクセスするので「Request content」に以下のパラメータを設定します。

{
“keywords”: “テクノロジー”,
“search_in”: “title,description”,
“sources”: “”,
“language”: “jp”,
“sort_by”: “publishedAt”,
“page”: 1,
“page_size”: 80,
“from_date”: “{{formatDate(addDays(now; -25); “YYYY-MM-DD”)}}”,
“to_date”: “{{formatDate(now; “YYYY-MM-DD”)}}”
}

『JSON』モジュール

『HTTP』モジュールから返却される値をJSON形式として認識させるために<Parse JSON>モジュールを使用します。

『Array aggregator』モジュール

JSON形式のデータを配列として格納します。

『Math』モジュール

取得したリストからランダムで1つの記事を選びます。『Math』モジュールを使用してリストの長さの範囲から1つの整数を選びます。

『Twitter』モジュール

最後にXへポストして終わりです。

Xのポスト内容を確認してみよう!

ポスト内容はこんな感じです。今回はニュースの「タイトル」と「URL」を出力させてます。工夫すれば色々中たちでのポストが可能となります。

まとめ

今回は「MakeとPythonを使ってXでニュースを自動配信する方法」について解説してきました。1から作ろうとするとかなりの量があったんじゃないかと思います。ただ、使いやすくて人気のある自動化ツール『Make』と個別のロジックを作り上げられるPythonを組み合わせることで最強のオリジナルシステムを作ることが可能になったわけです。今日紹介した内容を基礎に自分なりにアレンジしてみてください。

ABOUT ME
さな夫
さな夫
JTC SIer中間平社員
東京生まれ。30代。大学院修了後に今のSIer会社へ就職。普段はアプリ開発の設計を担当。奥さんと子供2人とほのぼのとした日常を過ごしながら技術系のブログを執筆中。
記事URLをコピーしました