なんか流行ってそうなのをみつけよう!|「MisskeyBot②」

Ubuntu
Amazonのアソシエイトとして、当メディアは適格販売により収入を得ています。

前提

前回はノート(ツイート)ができるようになったので、今度はBotっぽい機能をつけます。今回はAndroidのみでできません

作業

今回やることはLTLからツイートを一つ取得>そこから名詞を抜き取る>集計して多かったのをツイートです

まずjumanpp

日本語を品詞ごとに分割するコマンドです。

sudo apt install libprotobuf-dev protobuf-compiler -y

ここからダウンロードし展開

wget https://github.com/ku-nlp/jumanpp/releases/download/v2.0.0-rc4/jumanpp-2.0.0-rc4.tar.xz
tar xf jumanpp-2.0.0-rc4.tar.xz # decompress the package
cd jumanpp-2.0.0-rc4
mkdir bld 
cd bld
cmake .. -DCMAKE_BUILD_TYPE=Release
make install -j8

そしてこの機能を使い名詞と新しい単語を抜き出します。

その機能を使いLTLからツイートを一つ持ってきて名詞と新しい単語を抜き出し一日用一週間用一ヶ月用のファイルに抜き出しています。

ltl.sh

#!/bin/bash

# MisskeyのアクセストークンとインスタンスURL
ACCESS_TOKEN="ああああああああああああ"
INSTANCE_URL="https://misskey.io"
LAST_TEXT_FILE="$HOME/Documents/misskey_bot/last_text.txt"
DAILY_FILE="$HOME/Documents/misskey_bot/output_$(date +%Y-%m-%d).txt"
WEEKLY_FILE="$HOME/Documents/misskey_bot/output_$(date +%Y-%W).txt"
MONTHLY_FILE="$HOME/Documents/misskey_bot/output_$(date +%Y-%m).txt"

# ノートを一つ取得
new_text=$(curl -X POST -H "Content-Type: application/json" -d "{\"i\":\"$ACCESS_TOKEN\",\"limit\":1}" "$INSTANCE_URL/api/notes/local-timeline" | jq -r '.[0].text')

if [ -n "$new_text" ] && [ "$new_text" != "null" ] && [[ "$new_text" != *"http"* ]]; then
    last_text=$(cat $LAST_TEXT_FILE)
    echo "$last_text"
    # 新しいテキストが前回のテキストと異なる場合のみ処理を実行
    if [ "$new_text" != "$last_text" ]; then
        processed_text=$(echo "$new_text"|  sed 's/\$\[[^]]*\]//g'|sed 's/:[^:]*://g'| tr -d '\-()[]\@\#' | jumanpp | grep -E "未知語|名詞" | grep -v "数" | awk '{print $1}' | sort | uniq -u)
        echo "$new_text" > "$LAST_TEXT_FILE"
        echo "$processed_text" | tee -a "$DAILY_FILE" "$WEEKLY_FILE" "$MONTHLY_FILE" > /dev/null
        # 新しいテキストを保存
    fi
fi

そしてcronでこのコマンドを一分ごとに動かします。

結果の投稿

多かった単語を上から順に投稿します。月始めと週初めは先月と先週のランキングも載せます。

cronで一日に一回動かして下さい

#!/bin/bash

# MisskeyのアクセストークンとインスタンスURLを設定
ACCESS_TOKEN="ああああああああ"
INSTANCE_URL="https://misskey.io"
YESTERDAY_FILE="$HOME/Documents/misskey_bot/output_$(date -d +%Y-%m-%d).txt"
LAST_WEEKLY_FILE="$HOME/Documents/misskey_bot/output_$(date -d "last week" +%Y-%W).txt"
LAST_MONTHLY_FILE="$HOME/Documents/misskey_bot/output_$(date -d "last month" +%Y-%m).txt"
day_of_week=$(date +%u)
day_of_month=$(date +%d)

message="<center>**昨日のワード**\n\n"
message=$message$(grep -vE '^.$|^$' $YESTERDAY_FILE | grep -v -f $HOME/Documents/misskey_bot/zyogai.txt | sort | uniq -c | sort -nr | head -10 | awk '{printf " %d位, %d回: %s\\n", NR, $1, $2}')"</center>"

if [ "$day_of_week" -eq 1 ]; then
     message=$message"\n<center>**先週のワード**\n\n"$(grep -vE '^.$|^$' $LAST_WEEKLY_FILE |grep -v -f $HOME/Documents/misskey_bot/zyogai.txt | sort | uniq -c | sort -nr | head -10 | awk '{printf "%d位, %d回: %s\\n", NR, $1, $2}')"</center>"
fi


if  [ "$day_of_month" -eq 1 ]; then
$message\n<center>**先週のワード**</center>\n\n$(grep -vE '^.$|^$' $LAST_MONTHLY_FILE | grep -v -f $HOME/Documents/misskey_bot/zyogai.txt | sort | uniq -c | sort -nr | head -10 | awk '{printf " %d位, %d回: %s\\n", NR, $1, $2}')"</center>"
fi
 curl -X POST -H "Content-Type: application/json" -d "{\"i\":\"$ACCESS_TOKEN\", \"text\":\"$message\"}" $INSTANCE_URL/api/notes/create

zyogai.txtには面白みのない単語を入れて置きます。

まとめ

実際に動かしているのはここから

毎日流行語大賞BOT:kin::gin::dou: (@bash_bot)
昨日の流行語をランキング形式で発表! ローカルTLからノートを取得し分析しています

今回かたくなにPythonを使わずbashを使っていたのはid名にbashを入れてしまったからです。

適当にidを決めるのは辞めましょう