search
他カテゴリ

ALIS APIをつかう!

やよい🌜UGOK's icon'
  • やよい🌜UGOK
  • 2020/06/24 16:19
Content image

こんにちは。先週は投稿をさぼってしまいました。

今回はALIS APIを使っていこうと思います。
Twitter APIから得て保存したデータを元に、今度はALIS APIを叩いてALISのユーザIDを保存したいと思います。
 

"use strict";
const { readFileSync } = require("fs");
const fetch = require("node-fetch");
const { DynamoDB } = require("aws-sdk");
const dynamodb = new DynamoDB({ region: "ap-northeast-1" });
const dynClient = new DynamoDB.DocumentClient({
endpoint: "http://localhost:8000",
service: dynamodb,
});


function getUsers() {
const users_obj = JSON.parse(readFileSync("json/ugokMembers.json", "utf-8"));
let users = [];
users_obj.forEach((user) => {
users.push({
id: user.user_id,
name: user.name,
});
});
return users;
}


今回書いたコードが上記です。

Users関数内でDBに保存しているユーザ情報を取得しています。
本当はユーザ名をDBから直接取っていたのですが、アクセス数を減らすために一度JSON形式に保存したものを読み込む形にしています。
ugokMembers.jsonには、それぞれのメンバーのuser_id, name, twitter_id, alis_idを書いています。
そこからそれぞれのuser_id, nameのみを取り出してusersリストに格納しています。

async function getAlisUser(user) {
const request = await fetch(
encodeURI(`https://alis.to/api/search/users?query=${user.name}`)
);
const body = await request.json();
if (body.length === 0) {
console.log(`${user.name}のデータがありません`);
} else {
const params = {
TableName: "Member",
Key: {
userId: user.id,
},
UpdateExpression: "SET #a.#i = :newId",
ExpressionAttributeNames: {
"#a": "alis",
"#i": "id",
},
ExpressionAttributeValues: {
":newId": body[0].user_id,
},
};
try {
dynClient.update(params).promise();
console.log(`success!${user.id},${user.name}`);
} catch (error) {
console.log(error);
}
}
}

次にgetAlisUser変数です。(なぜかハイライトがききませんでした😢)
この関数内でALIS APIを使用しています。
fetchを使ってリクエストを送りました。Twitterの名前を使ってユーザ検索をするため、URIに日本語や記号(例:やよい🌛UGOK)を含んでしまいます。そのため、そのままではリクエストを送ることができません。なので、encodeURI関数を使って、リクエストを送ることができる形にエンコードしています。

次に、今はまだALISのユーザー名をTwitterと同じにしていない人がいることがあります。そう言う場合にデータがなくてDBに保存できない!ということが起こりうるので、例外処理を挟んでいます。
ALISのユーザ情報が見つかった人のみ、次の処理に進むことができます。

DBにはALISのIDを保存したいので、Twitter名から検索して得たユーザ情報からidを抽出し、保存しています。

async function main() {
const users = getUsers();
Promise.all(
users.map(async (user) => {
getAlisUser(user);
})
).catch((error) => {
console.error(error);
});
}

main();

最後に全部を呼び出すmainの関数を用意して、、
これでUGOKのリストからTwitterのユーザを保存、そのユーザ名を元にALISのユーザを保存することができました!

ところどころにあるasync/await, Promiseについて、かなり苦戦したことを覚えています・・・;;なんとか実装できてよかったです。

次は記事のいいねの数を取得するAPIを使ったことについてまとめたいなと思います。

 

参考記事

promiseを繰り返したい!という時に見た記事が多すぎたので、一番参考になった記事を置いておきます。

 

--------------------------

以下:async/await, Promiseについての自分用メモ

async/awaitを使わずにこのコードを実行してしまうと、APIのレスポンスを待たずに次の処理にいってしまいます。そうなってしまうと、保存したいデータの中身を知らないまま、DBの更新処理にうつってしまいます。データをもっていないので当然エラーになりますよね。そうなることを防ぐために非同期処理を同期処理にするasync/await, Promiseを使います。
awaitをつけると、つけた処理が完了するまで待ってくれます。awaitはasync関数内でしか使うことができないので、functionの前にasyncをつけておきます。

async/awaitは最初は暗号のようでうまくできずに苦しみましたが、Promiseを勉強してから学ぶと少し理解しやすかったです。

Article tip 0人がサポートしています
獲得ALIS: Article like 82.00 ALIS Article tip 0.00 ALIS
Article registration Article registration
やよい🌜UGOK's icon'
  • やよい🌜UGOK
  • @ugok841
UGOKのやよいです。Djangoをやっていました。最近Javascriptを勉強し始めました。Twitter-> @ugok841

投稿者の人気記事
コメントする
コメントする
こちらもおすすめ!
Eye catch
他カテゴリ

機械学習を体験してみよう!(難易度低)

nonstop-iida 2020/03/04
Like token Tip token
124.82 ALIS
Eye catch
トラベル

無料案内所という職業

bansu 2019/06/11
Like token Tip token
84.20 ALIS
Eye catch
トラベル

梅雨の京都八瀬・瑠璃光院はしっとり濃い新緑の世界

こすもす 2021/05/25
Like token Tip token
216.64 ALIS
Eye catch
他カテゴリ

警察官が一人で戦ったらどのくらいの強さなの?『柔道編』 【元警察官が本音で回答】

ふたひい@web3 2020/05/16
Like token Tip token
114.82 ALIS
Eye catch
他カテゴリ

テレビ番組で登録商標が「言えない」のか考察してみる

連獅子 2021/10/09
Like token Tip token
31.20 ALIS
Eye catch
トラベル

わら人形を釘で打ち呪う 丑の刻参りは今も存在するのか? 京都最恐の貴船神社奥宮を調べた

こすもす 2021/08/07
Like token Tip token
486.35 ALIS
Eye catch
クリプト

Bitcoinの価値の源泉は、PoWによる電気代ではなくて"競争原理"だった。

CryptoChick 2020/03/07
Like token Tip token
159.32 ALIS
Eye catch
グルメ

バターをつくってみた

モミジ 2021/02/18
Like token Tip token
127.90 ALIS
Eye catch
クリプト

17万円のPCでTwitterやってるのはもったいないのでETHマイニングを始めた話

nnppnpp(んぺー) 2021/09/08
Like token Tip token
46.60 ALIS
Eye catch
ゲーム

【初心者向け】Splinterlandsの遊び方【BCG】

暗号資産ジョシ校生 蟻巣 2021/07/07
Like token Tip token
6.32 ALIS
Eye catch
他カテゴリ

オランダ人が語る大麻大国のオランダ

Jimmy 2018/12/21
Like token Tip token
46.20 ALIS
Eye catch
他カテゴリ

京都のきーひん、神戸のこーへん

yamaeigh 2020/02/15
Like token Tip token
12.10 ALIS