#高垣楓(たかがき かえで)
「アイドルマスター シンデレラガールズ」の登場人物の1人であり、自分がお気に入りのアイドル。
#このアプリを作成した目的
「楓さんが好きなので、楓さんの画像を見たい。でも、手で検索するのは大変なので自動化しよう!」
という、思い付き。
#流れ
- Azure FunctionsとGitHubの連携
- Azure FunctionsのHttpTrigger作成
- ロジックアプリの作成とFunctionsの連携
- HttpTriggerの処理作成
#1. Azure FunctionsとGitHubの連携
ソースコードはGitHubで管理したい[1]。
- GitHubにてRepositoryを作成
- 新規に作成したAzure Functionsの
プラットホーム機能->コードデプロイ->セットアップ->ソースの選択->GitHubで、作成したRepository
を選択。 - GitHubからローカルにClone
#2. Azure FunctionsのHttpTrigger作成
GitHubにPushをすると、Azure Functionsにデプロイされるようになっている。
Functionsを作成[1]。
- Azure上で表示させたい関数名のフォルダ「HttpTriggerKAEDEfavorite」を作成。
- Functionsの設定となるfunction.jsonと,JavaScriptのソースコードindex.jsを作成
- COMMIT&PUSH!
Functionsの設定となるfunction.json
の中身
{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "req"
},
{
"type": "http",
"direction": "out",
"name": "res"
}
],
"disabled": false
}
#3.ロジックアプリの作成とFunctionsの連携
ロジックアプリにツイート検索させ、Functionsに渡すようにする[2]。
Azureポータルにて、「Logic App」を作成。
作成したロジックアプリから、開発ツール->新しいツイートが投稿されたら
を選択。
ツイッターの認証をし、以下のように設定。
- 検索テキスト:楓さん
- 間隔:1
- 頻度:時間
以下のように選択し、ロジックアプリで検索したツイートをFunctionsに渡す。
新しいステップ->アクションの追加->Azure Functions->作成したAzure Functionsの名前->HttpTriggerKAEDEfavorite
要求本文には、「OriginalTweet」を設定。
「メディアURL」にしないのは、メディア以外も使うかもと思っているため。
これで、ロジックアプリからFunctionsに検索されたツイートが渡されるようになった。
#4. HttpTriggerの処理作成
ロジックアプリから渡されるツイート内容の処理を作成する[2]。
module.exports = function (context, req) {
context.log('JavaScript HTTP trigger function processed a request.');
var Twitter = require('twitter');
//入力Tweet
var inputTweet = req;
context.log('Create client.');
//Twitterクライアントの作成
var client = new Twitter({
consumer_key: process.env.TWITTER_CONSUMER_KEY,
consumer_secret: process.env.TWITTER_CONSUMER_SECRET,
access_token_key: process.env.TWITTER_ACCESS_TOKEN_KEY,
access_token_secret: process.env.TWITTER_ACCESS_TOKEN_SECRET
});
context.log('Created client!!');
if('MediaUrls'in inputTweet.body ){
client.post('favorites/create', {id: inputTweet.body.TweetId}, function(error, tweet, response) {
if(error) throw error;
console.log(tweets); // The favorites.
console.log(response); // Raw response object.
});
}else{
context.log('No Media!!');
}
};
ここでは、環境変数を設定しています[2][3][4]。
また、TwitterをJavaScriptから操作できるパッケージを導入しています[2][5][6]。
#完成
やった!完成だということで動かしてみると…
大量にファボされるので、一瞬で止めました(泣)
#問題点
そもそも、シンデレラの楓さんであるかの判別ができていないため、無差別にファボしてしまう。
ここで画像認識を使い、シンデレラの楓さんがであるかが判別できればかっこいい…
#参考
[1]Azure Functions を GitHub と Continuous Integrationして自動デプロイされるようにしてみた
[2][Logic Apps, Azure Functions を使い 全自動ついふぁぼ機をサーバーレスで作った。]
(https://qiita.com/fumiya-kume/items/edc3b01b8143863e4fd4)
[3]Twitter API Key を取得する方法
[4]TwitterのAPIを使用するために必要なキーを取得する手順
[5]Twitter for Node.js
[6]node-twitter