世界のやまさ

SEKAI NO YAMASA

Azure Logic App で Twitter のログを取得して Web API を叩く

Azure Logic App を使用すると、お絵かきする感じでアプリが作れます。

今回は Twitter で Azure が含まれるログを取得したら、自作の Web API を叩くということをやってみます。

Azure Logic App を作成する

プレビューポータル(新しいポータル)からのみ作成できます。

f:id:nnasaki:20150325142129p:plain

Triggers and actions を追加する

作成したら次の箇所をクリックして、ワークスペース(?)を開く

f:id:nnasaki:20150325142256p:plain

Twitter Connector」 を選択する。無い場合は右下の Marketplace から作成出来ます。注意点として、同じ resource group の App のみ選択できます。Authorize して、Twitter アカウントと認証する。

f:id:nnasaki:20150325142710p:plain

Twitter Connector のキーワードに「Azure」を入力する

  • 「New Tweet」を選択する

f:id:nnasaki:20150325142907p:plain

  • Keyword に 「azure」を入力して保存

f:id:nnasaki:20150325143033p:plain

Web API を用意する

今回は Java で Spring Boot を使用してみました。

詳細は省きますがコードはこんな感じです。Spring Initializrから Web だけチェックしてダウンロードしたものにコピペしてあげれば動くと思います。

package demo;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.Optional;

@SpringBootApplication
@RestController
public class DemoApplication {

    private static final Logger logger = LoggerFactory.getLogger(DemoApplication.class);

    @RequestMapping("/")
    @ResponseBody
    String home(@RequestParam(value = "tweet") Optional<String> tweet) {
        if (tweet.isPresent() == false) return "tweet is null";

        logger.info("tweet are " + tweet.get());
        return "tweet echo that " + tweet.get();
    }

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

これで、gradlew bootrunをすると Tomcat が立ち上がります。 http://localhost:8080/?tweet=aaaaと呼び出せば、aaaaが返ります。

f:id:nnasaki:20150325153720p:plain

ngrok で公開する

このままだと、azure から接続できないので、ngrok を使って公開します。

localhost はそのまま立ち上げておいて、 ngrok 8080 を実行するとこんな感じになります。

f:id:nnasaki:20150325154110p:plain

forwarding のアドレスを実行できることを確認します。

f:id:nnasaki:20150325154217p:plain

Azure Logic App から Web API を呼び出す

再び、Azureに戻って、「Trigger and actions」の「HTTP 」を選択して、「GET」の action を選びます。

f:id:nnasaki:20150325154944p:plain

URI@concat('http://9a1b70a.ngrok.com/?tweet=', triggers().outputs.body.TweetText) と入力します。

f:id:nnasaki:20150325155958p:plain

ここも注意点として、文字列の結合は@concat()を使いますhttp://9a1b70a.ngrok.com/?tweet=@triggers().outputs.body.TweetTextとしたいところですが、うまくいきませんのでご注意ください。

動かしてみる

うまくいくと、Azure のログがこんな感じで出ます。

f:id:nnasaki:20150325160251p:plain

ログをクリックした詳細です。

f:id:nnasaki:20150325161530p:plain

ローカルの Web API もこんな感じででます。

f:id:nnasaki:20150325160432p:plain

まとめ

twitter から取得して、なにかするというのがすぐに出来ました。このほかに、twilio や facebook と連携もできますし、間にフィルター的な感じの処理を入れることも出来ます。これは便利ですね。

今回作成したアプリを Azure API App として公開すれば、他のアプリと連携も可能になります。

個人的には Enterprise Integration Patterns - SplitterAggregator のようなフローが組み込めるようになると良いなと思います。

参考リンク