これは何?
2023年5月に旧Twitter社が方針を変えて、Jetpack等での自動Tweet機能をできなくするようになりました。
当ブログも連携をしていたのですが、突然出来なくなって驚いた事を覚えています。
それ以降Twitterには手動で貼付けをしていたりしていたのですがここ最近また何か変わったらしく、APIを使えるようになったのですがそれなりにプラグインも増えて来ているので皆さん使っていらっしゃると思います。
ですがどうも自分の思ったポストをしてくれないのが多く、手書きをしたりしていました。
しかし勉強でPythonを勉強し始めて「ちょっと1手間いるけど満足できるスクリプトができるんじゃないか」とポチポチ作っていました。
何とか形になりましたのでお披露目しようかと思います。
目的
最新のポストをwordpressから拾ってきていい具合に要約を噛まして送信しやすいようにタイトル等を組み合わせてクリップボードに出力するようにしようと考えました。
ようは自動でポストするのではなく自分が今まで手で書いていた情報を取り出そうという手動書き込み用データ生成スクリプトです。
仕様
このスクリプトはpythonが動くwindows用とします。クリップボードに吐き出すのがマックやLinuxでうまく動くか分からないので。著作権は主張しますが皆さんが使いやすいように加工するのはいくらでもやって下さい。
前提
pythonに以下のモジュールが動くようpipで先にインストールして下さい。
# ライブラリをPIPでインストールする #pip install pysummarization #pip install mecab-python3 #pip install unidic-lite #pip install nltk #pip install pyperclip
スクリプト
from pysummarization.nlpbase.auto_abstractor import AutoAbstractor
from pysummarization.tokenizabledoc.mecab_tokenizer import MeCabTokenizer
from pysummarization.abstractabledoc.top_n_rank_abstractor import TopNRankAbstractor
import requests
import json
import re
import pyperclip
#--------------------------変更箇所--------------------------------
# WordPressサイトのURLを設定します。
# my.wordpress.siteを変更して下さい。
# ブログの名前を変更して下さい。
url = "https://my.wordpress.site/wp-json/wp/v2/posts"
blogtitle = "ブログの名前"
#--------------------------変更箇所--------------------------------
# GETリクエストを送信してデータを取得します
response = requests.get(url)
# レスポンスをJSON形式で解析します
data = json.loads(response.text)
# 最新の記事を取得します
latest_post = data[0]
# 記事のURLを取得します
post_url = latest_post['link']
# テキストを読み込む
document = latest_post['content']['rendered']
# HTMLタグを除去します
content_without_tags = re.sub('<[^<]+?>', '', document)
# 自動要約のオブジェクトを生成
auto_abstractor = AutoAbstractor()
# トークナイザー(単語分割)にMeCabを指定
auto_abstractor.tokenizable_doc = MeCabTokenizer()
# 文書の区切り文字を指定
auto_abstractor.delimiter_list = ["。", "\n"]
# 文書の抽象化、フィルタリングを行うオブジェクトを生成
abstractable_doc = TopNRankAbstractor()
# 文書の要約を実行
result_dict = auto_abstractor.summarize(content_without_tags, abstractable_doc)
# 要約結果の取り出し
sum_text = ''
for sentence in result_dict["summarize_result"]:
sum_text += sentence
if len(sum_text) > 100:
break
# 文章頭にサイト名+posturl+Title+100文字までの要約を表示します
text = blogtitle + " " + post_url + " " + "\n[" + latest_post['title']['rendered'] + "]\n" + sum_text[:100]
# クリップボードにコピー
pyperclip.copy(text)
変更箇所と書かれている部分の自分のブログURLとサイト名を変更して下さい。
実行
これを実行すると指定のサイトの最新記事の情報を取得し、加工してからクリップボードに吐き出されます。
あとは自分でXに貼付けをして下さい。多分タイトルとか長いと多くなるかもしれませんがおおよその文字数に収まるようになっていると思います。
最後に
プラグインの仕様とかが全然わからないので作りようがないのでこのようにしました。
皆さんが使いやすいよう加工等して普及してくれる事を期待します。


コメント