#はじめに
この記事はうじまるさんのuzimaru0000/apex_rank_statusをPythonで書かせていただいたものを記事にしたものです
この記事では前回の記事と同様にTRACKER NETWORKのAPIを叩いてApex Legendsのランクポイントを取得し、それをTwitterのユーザー名に反映させます
ランクポイント関連のコードは記事の本質とは異なっているため、コードだけを載せるだけにします
また、__リポジトリを作成している__ことを前提に説明します
このコードのリポジトリ
#参考
uzimaru0000/apex_rank_status
#目次
#Twitter APIで名前を変更する
##Twitter APIの申請
この記事を参考にしてください
2020年度版 Twitter API利用申請の例文からAPIキーの取得まで詳しく解説
API申請が通ったら、API KEYとアクセストークンを控えておきます
##環境変数
今回はGithub Actionsを使用しているので、リポジトリに環境変数を設定して、それを読み込むようにします
以下の形式で環境変数を設定、使用します
名前 | 中身 |
---|---|
API_KEY | TwitterのAPI Key |
API_SECRET_KEY | TwitterのAPI Secret Key |
ACCESS_TOKEN | TwitterのAccess Token |
ACCESS_TOKEN_SECRET | TwitterのAccess Token Secret |
TRN_API_KEY | TRNのApi Key |
APEX_USER_IDENTIFIER | Apexのユーザ名 |
TWITTER_USER_NAME_TEMPLATE | Twitterのユーザー名テンプレート (ex: "hayapo{}") |
##使用するライブラリ
PythonのTwitterのラッパーであるpython-twitterを使用します
import twitter
使用する際はドキュメントを参照すると良し
##ランクポイントを取得する
この説明は前回の記事が詳しいです
ここではコードだけ載せます
import requests, json, os
from pprint import pprint
url = "https://public-api.tracker.gg/v2/apex/standard/profile/origin/SIN_HA_JECHT_DA"
header = {"TRN-Api-Key":os.environ['TRN_API_KEY']}#環境変数から読み込むようにしてる
res = requests.get(url, headers=header).json()
uzimaru0000/apex_rank_statusではランクポイントからランクに応じた絵文字を名前に付与しています。この記事でも、それを真似したいと思います。
rank_status = res["data"]["segments"][0]["stats"]["rankScore"]
rank_emoji = apex.set_rankname(rank_status)
rank_point = math.floor(res["data"]["segments"][0]["stats"]["rankScore"]["value"])
import emoji
Apex_rank = {\
'Bronze' : emoji.emojize(':3rd_place_medal:'),\
'Silver' : emoji.emojize(':2rd_place_medal:'),\
'Gold' : emoji.emojize(':1rd_place_medal:'),\
'Platinum' : emoji.emojize(':trophy:'),\
'Diamond' : emoji.emojize(':gem_stone:'),\
'Master' : emoji.emojize(':atom_symbol:'),\
'Predator' : emoji.emojize(':ogre:')\
}
def set_rankname(rank_status):
if 0 <= rank_status['value'] < 1200:
return Apex_rank['Bronze'] #🥉
elif 1200 <= rank_status['value'] < 2800:
return Apex_rank['Silver'] #🥈
elif 2800 <= rank_status['value'] < 4800:
return Apex_rank['Gold'] #🥇
elif 4800 <= rank_status['value'] < 7200:
return Apex_rank['Platinum'] #🏆
elif 7200 <= rank_status['value'] < 10000:
return Apex_rank['Diamond'] #💎
elif 10000 <= rank_status['value']:
if rank_status['rank'] is not None:
if rank_status['rank'] <= 750:
return Apex_rank['Predator'] #👹
else:
return Apex_rank['Master'] #⚛️
else:
return Apex_rank['Master'] #⚛️
else:
return emoji.emojize(':zzz:')
##ユーザー名を作成する
上記のコードで、ランクポイントを取得し、ランクに応じた絵文字をセットしました
次に、環境変数のTWITTER_USER_NAME_TEMPLATE
に絵文字とランクポイントを埋め込みます
name = env.twitter_user_name_template.replace('{}','{}{}'.format(rank_emoji, str(rank_point)))
これでユーザー名の作成は完了です
##Twitter APIでユーザー名を変更する
python-twitterを使用したユーザ名の変更は簡単で、UpdateProfile
モジュールのnameの部分に変更したい文字列を指定してあげるだけでいいです
#apiオブジェクトの作成
api = twitter.Api(consumer_key=env.CK, consumer_secret=env.CS, access_token_key=env.AT, access_token_secret=env.AS)
#UpdateProfileで名前変更
api.UpdateProfile(name=name)
これでAPIを使用して名前を変更するコードができました
#Github Actions
次にGithub Actionsにデプロイする方法を説明します
##環境変数の設定
環境変数で説明した通りに環境変数を設定します
環境変数を公開したくないので、Secretsを使用して安全に環境変数を使用できます
SettingsのSectretsに移動し、右上のNew Repository secretボタンで環境変数を設定します
##ActionとWorkflow
Github Actionsでは.github/workflow
においたYAML
ファイルで実行したい処理とその条件を定義するだけで簡単にプロジェクトをデプロイできます
環境変数やPythonファイルの実行などの個々のコマンドをAction、Actionの流れなどをまとめたものがWorkflowという認識で大丈夫だと思います
WorkflowはWorkflow構文と言うもので記述します
構文については公式のドキュメントを参照してください
###Workflowの構造
Workflowはこのような階層構造になっています
Workflow
└ jobs
└ jobの名前
└ steps
└ Action #個々のアクション
##Workflowの作成
Workflowを作成します
.github/workflow
ディレクトリを作成、そこにcron.yml
を作成します
以下のコードはcron.yml
に記述するものです
説明のためまとまったコードごとに分けていますが、最後にまとめたコードを貼っています
###スケジュールの設定
定期的に実行させるためにcrontabコマンドを使用してスケジュールを設定します
Workflowでcrontabコマンドを使うには、job
と同じインデントレベルにおいてon
構文で使用します
スケジュールは分 時 日 月 曜日
で指定します
on:
schedule:
- cron: '*/15 * * * *'
このようにすることで15分ごとにWorkflowが実行されます
###環境変数を読み込む
jobs:
build:
env:
API_KEY: ${{ secrets.API_KEY }}
API_SECRET_KEY: ${{ secrets.API_SECRET_KEY }}
ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
ACCESS_TOKEN_SECRET: ${{ secrets.ACCESS_TOKEN_SECRET }}
TRN_API_KEY: ${{ secrets.TRN_API_KEY }}
APEX_USER_IDENTIFIER: ${{ secrets.APEX_USER_IDENTIFIER }}
TWITTER_USER_NAME_TEMPLATE: ${{ secrets.TWITTER_USER_NAME_TEMPLATE }}
###リポジトリのチェックアウトとセットアップ
まずリポジトリをチェックアウし、Pythonをインストールします
バージョンを3.8.7
、アーキテクチャをx64
に設定しました
今回は外部ライブラリを使用するためpip
をインストールし、requirements.txt
の内容をインストールするようにしています
毎回、PyPIにアクセスして依存関係をインストールするのはかっこ悪いので、actions/cache@v1を用いて依存関係をキャッシュします
jobs:
build:
steps:
#チェックアウト
- uses: actions/checkout@v2
#Pythonのセットアップ
- name: Set up Python
uses: actions/setup-python@v1
with:
python-version: '3.8.7'
architecture: x64
#pipのキャッシュ作成
- name: Cache pip
uses: actions/cache@v1
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
#pipのインストールと依存関係のインストール
- name: pip Install
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
###Pythonファイルの実行
あとは実行するだけです
jobs:
build:
steps:
#実行
- name: Run main.py
run: python main.py
###YAMLコード全体
name: cron
on:
schedule:
- cron: '*/15 * * * *'
jobs:
build:
runs-on: ubuntu-latest
env:
API_KEY: ${{ secrets.API_KEY }}
API_SECRET_KEY: ${{ secrets.API_SECRET_KEY }}
ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
ACCESS_TOKEN_SECRET: ${{ secrets.ACCESS_TOKEN_SECRET }}
TRN_API_KEY: ${{ secrets.TRN_API_KEY }}
APEX_USER_IDENTIFIER: ${{ secrets.APEX_USER_IDENTIFIER }}
TWITTER_USER_NAME_TEMPLATE: ${{ secrets.TWITTER_USER_NAME_TEMPLATE }}
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v1
with:
python-version: '3.8.7'
architecture: x64
- name: Cache pip
uses: actions/cache@v1
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
- name: pip Install
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run main.py
run: python main.py
#成功してるか確認
##GithubのActionsを見てみる
ちゃんと出来てる
#終わり