3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Azure Functionsで楓さんに関するツイートを自動でファボするアプリ作ってみた

Last updated at Posted at 2018-05-20

#高垣楓(たかがき かえで)
「アイドルマスター シンデレラガールズ」の登場人物の1人であり、自分がお気に入りのアイドル。

#このアプリを作成した目的
「楓さんが好きなので、楓さんの画像を見たい。でも、手で検索するのは大変なので自動化しよう!」
という、思い付き。

#流れ

  1. Azure FunctionsとGitHubの連携
  2. Azure FunctionsのHttpTrigger作成
  3. ロジックアプリの作成とFunctionsの連携
  4. HttpTriggerの処理作成

#1. Azure FunctionsとGitHubの連携
ソースコードはGitHubで管理したい[1]。

  1. GitHubにてRepositoryを作成
  2. 新規に作成したAzure Functionsのプラットホーム機能->コードデプロイ->セットアップ->ソースの選択->GitHubで、作成したRepositoryを選択。
  3. GitHubからローカルにClone

#2. Azure FunctionsのHttpTrigger作成
GitHubにPushをすると、Azure Functionsにデプロイされるようになっている。
Functionsを作成[1]。

  1. Azure上で表示させたい関数名のフォルダ「HttpTriggerKAEDEfavorite」を作成。
  2. Functionsの設定となるfunction.jsonと,JavaScriptのソースコードindex.jsを作成
  3. 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

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?