このページの本文へ

FIXER cloud.config Tech Blog

【初心者向け】Azure Functionsと“ポケモンAPI”で遊ぶ

2021年11月09日 11時00分更新

文● ざぶろー/FIXER

  • この記事をはてなブックマークに追加
  • 本文印刷

 本記事はFIXERが提供する「cloud.config Tech Blog」に掲載された「【初心者向け】Azure FunctionsとポケモンAPI #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}")


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


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を触ってみました。通知されるポケモンを見てルビーサファイアまでしか知らない僕の知識ではポケモンマスターにはなれないことが分かりました。それでは!

ざぶろー/FIXER

(ほり こうざぶろう)
営業からエンジニアを目指しています!

[転載元]
【初心者向け】Azure FunctionsとポケモンAPI #Azureリレー

カテゴリートップへ