Help us understand the problem. What is going on with this article?

Twitterでいいねしたツイートの画像をアダルト判定してSlackに書き込み・Dropboxに保存するようにしてみた。

More than 1 year has passed since last update.
  • 8月頃に趣味でやってみた事を記事にしてみた。

使用した物

処理の流れ

  • TwitterでいいねしたツイートをIntegromatで監視
    • いいねしたツイートの Images[] の長さが0以下なら twitter_like といったチャンネルに書き込むように分岐
    • いいねしたツイートの Images[] の長さが1以上なら Images[] の長さ分だけ分岐後の処理を繰り返す
      • 分岐先で Computer Vision に URL for downloading the image をPOSTし、判定をComputer Visionより取得
      • Computer Vision より取得した Data を JSONにParse
      • ParseされたJSONオブジェクトの isAdultContentisRacyContent を用いて、三分岐させる。
        • isAdultContentisRacyContent の両方がfalseの場合は最初の分岐と同じ twitter_like といったチャンネルに書き込むように分岐

Integromatの実際のシナリオ

スクリーンショット 2018-10-12 20.07.19.png

スクリーンショット 2018-10-12 20.12.51.png

  • Ocp-Apim-Subscription-Key に指定するキーはAzure側コンソールの RESOURCE MANAGEMENTKeysKEY 1 or KEY 2 からコピーペーストする

スクリーンショット 2018-10-12 20.19.49.png

Zapierではダメなのか?

  • 当初はZapierにて表題等を実現しようとしていたものの、以下の制約によりIntegromatに乗り換える事にした。
  1. 無料プランではJavaScriptの実行時間が1secを超えると問答無用でタイムアウトとなってしまう。
    • ComputerVisionからのレスポンスを受け取る前に処理が終了してしまう
  2. 無料プランでは100タスクまでしか実行出来ないため、リセットされるまでのタスク実行可能数が現実的に足りない。
  3. 無料プランではトリガーを含めて2ステップまでのZapしか実行出来ないため、制約が大きい。
    • 下の写真のようなフィルターを使った3ステップZapは無料プランでは動かす事が出来ない。

スクリーンショット 2018-10-12 20.43.28.png

余談

  • リストに追加されるR15-18画像を自動収集する については以下のコードとなっている。(Dropboxへの保存は入っていない)

スクリーンショット 2018-10-12 20.51.53.png

function postToComputerVisionAPI() {
    var subscriptionKey = "<任意のComputer Visionサブスクリプションキー>";

    var uriBase = "https://<任意のComputer Visionリージョン>.api.cognitive.microsoft.com/vision/v1.0/analyze";

    fetch(uriBase + "?" + "visualFeatures=Adult", {
        method: 'POST',
        headers: {'Content-Type': 'application/json', 'Ocp-Apim-Subscription-Key': subscriptionKey},
        body: '{"url": ' + '"' + inputData.sourceImageUrl + '"}'
        }).then(function(response) {
            return response.text();
        }).then(function(responsebody) {
            var output = {response: responsebody};

            var parsedOutput = JSON.parse(output.response)

            console.log("isAdultContent: " + parsedOutput.adult.isAdultContent);
            console.log("isRacyContent : " + parsedOutput.adult.isRacyContent);

            if (parsedOutput.adult.isAdultContent || parsedOutput.adult.isRacyContent) {
                postToSlack();
            } else {
                callback(null, output);
            }
        }).catch(function(error) {
            callback(error);
        });
}

function postToSlack() {
    const text = inputData.url + " " + inputData.fullText;

    const endpoint = "<任意のincoming-webhookエンドポイント>";

    const payload = JSON.stringify({"text": text, "channel": "<任意のSlackチャンネル名>" });

    fetch(endpoint, {
        method: 'POST',
        headers: {'Content-Type': 'application/json'},
        body: payload
        }).then(function(response) {
            return response.text();
        }).then(function(responsebody) {
            callback(null, {sourceImageUrl: inputData.sourceImageUrl});
        }).catch(function(error) {
            callback(error);
        });
}

console.log(inputData.sourceImageUrl);

if (!inputData.sourceImageUrl) {
    callback(null, {});
} else {
    postToComputerVisionAPI();
}

参考

Computer Vision APIのサンプル(UWP編)
Computer Vision API - v1.0
SlackのIncoming Webhooksを使い倒す
アプリケーションをつなぐIntegromatが素晴らしい
icotile2 Zapier用のリスト作成に使用
PlayCode Zapier用のJavaScriptを記述する際に使用

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした