STUDY MEMO

学習のメモ書き

< Node.js > ツイートを取得して、aws comprehendで解析する

const needle = require("needle");

const token = process.env.BEARER_TOKEN; // bearer_tokenを環境変数で設定しておく

const endpointUrl = "https://api.twitter.com/2/tweets/search/recent";

async function getRequest() {
  const params = {
    query: "from:アカウント名 -is:retweet -is:reply",
    "tweet.fields": "text",
    max_results: 取得数,  // max 100
  };

  const res = await needle("get", endpointUrl, params, {
    headers: {
      "User-Agent": "v2RecentSearchJS",
      authorization: `Bearer ${token}`,
    },
  });

  if (res.body) {
    let tweetText = res.body.data; //jsonのdataプロパティを取得
    // オブジェクトのtext部分を配列に変換
    let ar = [];
    for (let i = 0; i < tweetText.length; i++) {
      ar.push(tweetText[i].text.replace(/\r?\n/g, "").replace(/#.*$/, ""));
    }  
    return ar;
  } else {
    throw new Error("Unsuccessful request");
  }
}
//replace(/\r?\n/g, ""):改行の\nを削除
//replace(/#.*$/, ""):正規表現で#以降を削除


getRequest().then((response) => {  // .thenでpromiseをcatch
  let AWS = require("aws-sdk");

  AWS.config.update({
    region: "us-east-1",
    credentials: {
      accessKeyId: "",  //キーを入力
      secretAccessKey: "",  //キーを入力
    },
  });


  const comprehend = new AWS.Comprehend();

  let array = response;

  let params = {
    TextList: array,
    LanguageCode: "ja",
  };

  comprehend.batchDetectSentiment(params, (err, data) => {
    if (err) {
      console.log(err, err.stack);
    } // an error occurred
    else {
      for (let i = 0; i < data.ResultList.length; i++) {
        console.log(data.ResultList[i].SentimentScore.Negative);  //negativeの数値だけ取得していることを確認
      }
    } // successful response
  });
});

参考文献

needle - npm

Node.jsのHTTPクライアントまとめ2020 - Qiita

axios vs got vs needle vs request | npm trends