【初心者向け】Azure FunctionsとポケモンAPI #Azureリレー

こんにちは、ほりです。

久しぶりの投稿で今回はAzureリレーを担当したいと思います。いつも通り超初心者向けですが、あしからず。

みなさんポケモン好きですか?僕は元ポケモンマスターなんですが、それも過去の話になってしまって最近はめっきりポケモンの名前を忘れてしまいました。そこで今回は5分に1度ランダムにポケモン情報をSlackで通知してくれるAzure Functionsを作りたいと思います。まぁポケモンエンジニアへの道ってところですね。

①Azure Functionsの作成

早速Azure Functionsを作成していきます。リソース作成画面で任意のサブスクリプション、リソースグループ、名前を入力します。また今回は下図のようにランタイムスタックをPython 3.8で作成していきます。プランはサーバーレスを選択しています。他の部分は基本的にデフォルトの設定のままで問題ありませんが良しなに調整をお願いします。

②ポケモンAPIの利用したコーディング

下記のコマンドからfunctoinプロジェクトを作成してアクティベートしていきます。

func init PokemonProject --python 
python -m venv .venv
.venv/scripts/activate

続いてこちらのコマンドを実行してFunctionを新規作成していきます。

func new --name PokemonTimer

すると下図のように適当なトリガーを選択するよう求められるので「TimerTrigger」を選択していきます。

作成されたファイルを見ていきます。(参考資料:Azure Functions の Python 開発者向け

PokemonTimer\function.json

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "name": "mytimer",
      "type": "timerTrigger",
      "direction": "in",
      "schedule": "0 */5 * * * *"     ←5分に一回実行するって意味
    }
  ]
}

Scheduleの書き方が気になる方はこちらを参考にしてください。デフォルトが5分に一回実行することになっていました。つまり5分に一回ポケモンが通知されるということですね。ポケモンマスターへの道のりはそれだけ過酷だということを表しています。

PokemonTimer/__init.py__

import datetime
import logging
import requests
import random
import slackweb
import azure.functions as func

def main(mytimer: func.TimerRequest) -> None:
    utc_timestamp = datetime.datetime.utcnow().replace(
        tzinfo=datetime.timezone.utc).isoformat()

    if mytimer.past_due:
        logging.info('The timer is past due!')

    # 確認したところ898のポケモンが登録されている
    num = random.randint(1,898)
    url = f"https://pokeapi.co/api/v2/pokemon-species/{num}/"    ←PokeAPI
    pokemon = requests.get(url)
    # responseをjsonに変換
    pokemon_json = pokemon.json()

    # 種類と名前の変数
    genus = pokemon_json['genera'][0]['genus']
    name = pokemon_json['names'][0]['name']
  

  # Slackへ通知
    slack = slackweb.Slack(url="https://hooks.slack.com/services/{ WebhookのURL }")
    slack.notify(text=f"{genus}:{name}")

ここではPokeAPIを利用しています。教育用としても使われているとか。ポケモン・アイテム・ワザ・タイプといった様々な情報を返してくれる多数のエンドポイントが用意されています。今回はポケモンの種類と名前を返してくれる下記を使いましょう。

https://pokeapi.co/api/v2/pokemon-species/{num}

Slackへの通知については今回は割愛させていただきます。

こちらの記事を参考にしてください。非常に簡単です!

requirements.txt

azure-functions
requests==2.21.0
slackweb==1.0.5

③Azureにデプロイ→通知確認

デプロイはVisual Studio Codeを利用すると非常に楽チンです。Azure(拡張機能で追加してください)にログインしてデプロイしちゃいます。デプロイ先はもちろんさっき作ったヤツ。簡単ですね!

Slackを確認すると確かに5分に一回通知が来ています!

④まとめ

今回はAzure Functionsを触ってみました。通知されるポケモンを見てルビーサファイアまでしか知らない僕の知識ではポケモンマスターにはなれないことが分かりました。それでは!