見出し画像

開発日記(2024/05/28)思ったよりも海外でインストールされるのでやっぱり国名も知りたい。

おかげさまで開発した機能は順調に毎日インストール数を通知してくれています。

タイトルにも書きましたが、思ったより海外でダウンロードされることが分かりました。まあ、"nail bite"で検索しても競合ほとんどいないので・・・ちゃんと有料機能も作ったら、外貨を稼いでくれないかしら。。。(円安ですし・・・)

前回の日記にも書いた通り、特にどこの国でインストールされてるかとかはそんなに大事ではないので、別にわかるような通知にあえてする必要もないかなと思っていたのですが、ここまで頻繁にあると流石に気になります。

ということで、国名も通知してくれるように改修しようと思います。(少しでも開発画面を触らないと忘れてしまうというのもあります。。。)

既にGCFにどうやってデプロイしていたのかだいぶ怪しい・・・ということでまずGCFのコンソールにログイン。

ど、どれだっけ・・・不要になったやつは消そう。。。(sendLineMessageSalesReportでした。)

改めて、現状のコードは下記です。

const axios = require('axios');

exports.sendLineMessageSalesReport = (req, res) => {
  const token = 'LINEボットのトークン';
  const userId = 'LINEボットのUserID';

  axios.get('https://ここはASCからデータを取得するエンドポイント')
    .then(apiResponse => {
      // APIから取得したデータから"Units"の値を抽出する
      const units = apiResponse.data.map(item => item.Units).filter(units => units !== undefined && units !== "");

      // LINEのメッセージを構築する
      const message = `昨日は${units}個のアプリがインストールされました!`;

      const data = {
        to: userId,
        messages: [
          {
            type: 'text',
            text: message
          }
        ]
      };

      // LINE APIにメッセージを送信する
      return axios.post('https://api.line.me/v2/bot/message/push', data, {
        headers: {
          'Content-Type': 'application/json',
          'Authorization': `Bearer ${token}`
        }
      });
    })
    .then(response => {
      res.status(200).send('Success: ' + JSON.stringify(response.data));
    })
    .catch(error => {
      res.status(500).send('Error: ' + (error.response ? error.response.data : error.message));
    });
};

"Units"というのがインストール数で、下記の部分で抽出してます。

// APIから取得したデータから"Units"の値を抽出する
      const units = apiResponse.data.map(item => item.Units).filter(units => units !== undefined && units !== "");

ASCからのレスポンスは下記です。

  {
    "Provider": "APPLE",
    "Provider Country": "US",
    "SKU": "nailgrow_20201228",
    "Developer": "Yuta Makanai",
    "Title": "nailgrow",
    "Version": "0.0.3",
    "Product Type Identifier": "1",
    "Units": "2",
    "Developer Proceeds": "0.00",
    "Begin Date": "05/20/2024",
    "End Date": "05/20/2024",
    "Customer Currency": "JPY",
    "Country Code": "JP",
    "Currency of Proceeds": " ",
    "Apple Identifier": "1546614191",
    "Customer Price": "0.00",
    "Promo Code": " ",
    "Parent Identifier": " ",
    "Subscription": " ",
    "Period": " ",
    "Category": "Medical",
    "CMB": "",
    "Device": "iPhone",
    "Supported Platforms": "iOS",
    "Proceeds Reason": " ",
    "Preserved Pricing": " ",
    "Client": " ",
    "Order Type": " "
  }

"Country Code"を一緒に抽出してあげればいいはずなので、こんな感じですかね。

// APIから取得したデータから"Country Code"の値を抽出する
      const countryCodes = apiResponse.data.map(item => item['Country Code']).filter(countryCode => countryCode !== undefined && countryCode !== "");

LINEのメッセージに反映されるようにこちらも修正します。

// LINEのメッセージを構築する
const message = `昨日は${countryCodes}${units}個のアプリがインストールされました!`;

さて、これをデプロイしたいのですが、はて、、、どうやるんだっけ・・・(GPT先生との会話を遡る)

該当のフォルダが存在するディレクトリまで移動して、下記を実行。(自分用の備忘メモです。)

gcloud functions deploy sendLineMessageSalesReport \
--runtime nodejs20 \
--trigger-http \
--allow-unauthenticated \
--source=/Users/makanai_fish/node/my-cloud-function/sendLineMessageSalesReport

無事に行きました!

お〜いいじゃんいいじゃん!(1時になれば自動で実行されるのに待ちきれなくて手動で実行してしまった。)

JPとかSEとか国名の略語はわかりにくめではありますが、読み替えのマスタ用意するみたいな工数はかけられないので、十分です!いや〜進捗があるって気持ちいいなあ。(そろそろ本題のアプリ開発に着手したいなあ。。。)


ご覧いただきありがとうございます。とても嬉しいです。