//tips
//smart contract
Codementorの方からレスポンスがない・・・。時差の問題と人気の方の時間的都合かもしれない。うまく時間が取れるかどうかわからない。
Codementorの方は少し気長に待ってみて一人だけトライしてみようかと思う。
同時に日本のcodecampでオーダーメイドのセッションとしてサポートしてもらえないか確認。明日打ち合わせ。
Index.jsスクリプトの続き。tweet streamのrule設計の部分。
const needle=require('needle');
const config=require('dotenv').config();
const TOKEN=process.env.TWITTER_BEARER_TOKEN;
const rulesURL='https://api.twitter.com/2/tweets/search/stream/rules';///2/tweets/search/stream/rules
const streamURL='https://api.twitter.com/2/tweets/search/stream?tweet.field=public_metrics&expansions=author_id';//docから確認
const rules=[{value:'giveaway'}];
//get stream rules
async function getRules(){
const response=await needle('get',rulesURL,{
headers:{
Authorization:`Bearer ${TOKEN}`
}
});
//console.log(response.body);
return response.body;
}
/*
(async()=>{
let currentRules;
try{
currentRules= await getRules();
}catch(error){
console.error(error);
process.exit(1);
}
})();
*/
//Set stream rules
async function setRules(){
const data={
add:rules
}
const response=await needle('post',rulesURL,data,{
headers:{
'content-type':'application/json',
Authorization:`Bearer ${TOKEN}`
}
});
return response.body;
}
//Delete stream rules
async function deleteRules(rules){
if(!Array.isArray(rules.data)){
return null;
}
const ids=rules.data.map((rule)=>rule.id);
const data={
delete:{
ids:ids
}
}
const response=await needle('post',rulesURL,data,{
headers:{
'content-type':'application/json',
Authorization:`Bearer ${TOKEN}`
}
});
return response.body;
}
function streamTweets(){
const stream=needle.get(streamURL,{
headers:{
Authorization:`Bearer ${TOKEN}`
}
})
stream.on('data',(data)=>{
try{
const json=JSON.parse(data);
console.log(json);
}catch(error){
}
})
}
;(async()=>{
let currentRules;
try{
//get all stream rule
currentRules= await getRules();
//delete
await deleteRules(currentRules);
//set
await setRules();
}catch(error){
console.error(error);
process.exit(1);
}
})();
やっていく中でそもそもneedleってなんやねんとなってきたので調べてみると、シンプルに使えるnode.js製httpクライアントライブラリとのこと。
https://co.bsnws.net/article/155
「Oauth認証が必要なことは無いので、シンプルに外部からデータを取得したい or データを送信したい」なんて人にオススメのnode.js用httpクライアントライブラリらしい。
調べていくとAxios,node-fetchにつぐ、Node.jsのrequestモジュールがわりに使われる候補だったよう。2020年にrequestモジュールが非推奨になり注目度が増しているよう。
確かにaxiosやnode-fetchは見覚えがある。
https://qiita.com/hide2018/items/0507e488d91e28592ca4
https://openbase.com/categories/js/best-nodejs-http-request-libraries
https://www.npmjs.com/package/needle
さらにnode.jsで使われるexpressについても一緒に確認。
ExpressはそのNode.jsでの開発をスピードアップするためのフレームワークで、システム開発時によく使う機能や設計などを予め用意してあるので開発が捗る。
確かに毎度お世話になっている。
https://qiita.com/nkjm/items/723990c518acfee6e473