どうもかわうそです!
今日は『node | Twitter予約投稿機能をcsvファイルで作ってみた|JavaScript』という内容を解説していきます。
学習中のnodeを使い、簡単なtweet機能を実装してみました。
とはいえ、すごく便利なモジュール(プラグインみたいなやつ)が用意されているので、正直めっちゃ簡単でした!
この記事はこんな方におすすめかも、です。
- JavaScriptで簡単な作品を作ってみたいけど、思いつかない
- JavaScriptの基本的な知識がある
- サーバーサイド言語も学習したいが、jQueryしか分からない
- 複数言語を学習するのは非効率なので、フロントからサーバーサイドまで一貫できるJavaScriptに興味がある
- TwitterのBOTを自分で作ってみたい
ではさっそくいきましょう!
結論:今回できた作品がこちら
とりあえず、今回作ったものを紹介します。
思ってたのと全然違う!場合は、速やかに離脱するのがおすすめです!
流れとしては
- csvファイルを読み込む
- 指定時間と投稿内容を取得する
- 指定時間になれば、投稿内容をtweetする
これだけです。
csvファイルはこんな感じです。spreadsheetをcsv形式でダウンロード。
1 2 3 4 5 |
content: かわうそは予約投稿機能をnodeで作成しています。 この投稿は2020年4月19日21:20に投稿されているはずです。 time: 2020/4/19/21:20 |
1 2 3 4 5 |
content: かわうそは予約投稿機能をnodeで作成しています。 この投稿は2020年4月19日21:20に投稿された、その1分後に投稿されるはずです。 time: 2020/4/19/21:21 |
※スクショ『2020年4月19日21:21に投稿された 』 => 『2020年4月19日21:20に投稿された 』です。申し訳ございません。
本日2020年4月19日です。
このCSVファイルを読み込み、node実行ですると、
21時20分と21時21分にそれぞれ投稿されるはず・・・です!
ということで、nodeの実行から投稿までを記録してみました。
まず21時20分に一発目、21時21分に2発目が投稿されます。
途中ぐだっとなった個所もありましたが、とりあえず成功です。
まずはnodeをインストールしよう
nodeのインストールは簡単です。
nodeだけでなく、npmも必ずインストールしましょう。
目的達成のためだけを考えて、nodeの詳しい説明はスルーしていきます。
以下のサイトが参考になると思います。
Node.js / npmをインストールする(for Windows)
[Node.js]WindowsにNode.js(npm)をインストールしよう。
もし、もうちょっと背景から詳しく学びたい!って場合は格安で動画学習できるUdemyがおすすめです。
しかも30日間返金付き。やってみてだめなら返金!これ最強。
かわうそも以下の2コースを学びました。2000円程度で、ざっくりnodeに必要なことを学べるのでおすすめです。
ただ、アロー関数やコールバックなどポンポン出てきますので、JavaScriptの基礎を 知らないときついかもです。
そんな方は、この動画教材がおすすめです。
JavaScriptの動作を論理的に解説!JavaScript中級者への道
こちらは、無料。
このように、たくさんの良質教材が無料で、格安で揃っているサービスもあります。
nodeはほかの言語と比較して、ネット検索だけの情報仕入れだけではどうしても絶対量が少ないです。
いろんなサービスを使って、インプットを深めてみましょう。
※かわうそはudemyの回し者、というわけではありません。紹介料なども一切発生しておりません。
自分のTwitterアカウントのAPIを取得しよう
こちらのサイトを参考にしました。
かわうそが書くよりも、キャプチャ付きで超絶丁寧にまとめられていますので、参考にすべしです。
ちょっと英語での文章入力がハードルになるかもですが、
google翻訳を駆使して乗り越えましょう。
nodeでtwitter投稿するソースコード
かわうその書いたコードがこちらです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
// 設計と分解 //twitterAPI取得 //node経由でtweetできるか確認 //--------------------------------------- //csvファイルを読み込む //読み込んだデータをjsonにパースする //--------------------------------------- //指定時間投稿機能 ifとタイムスタンプで実装 //forEachで行ごとの投稿内容and指定時間投稿を実行。 const twitter = require('twitter'); const fs = require('fs'); const csv = require('csv'); const bot = new twitter({ consumer_key : "VxBkczTH89VIItst53frtxxVY", consumer_secret : "jwoh7zNo5T7zsIAuUPwvRYULqvX4GlApzZulP2jcCoRSGX8OCf", access_token_key : "1061990271053778944-9GufB38cDidMGpsFtaCNJcO4qLVhOj", access_token_secret : "CV0uDVyoBsiV6EiDNMg04WOGaAOuCnYNEluLU3cz0cuUB" }); // 仮引数contentを投稿します。 function tweet (content){ bot.post('statuses/update', {status: `${content}`}, function(error, status, response){ console.log(status); }); } //csvファイルを読み込み、JSONに変換します let testCsv = fs.createReadStream('tweet - test.csv'); //オプションのcolumns: trueが強力です let parseTestCsv = testCsv.pipe(csv.parse({columns: true}, function(err, data) { // 読み込み時のタイムスタンプを取得します let date = new Date(); let dateTime = date.getTime(); //csvファイルの列ごとに処理を繰り返します data.forEach( (element) => { //csvで指定したtimeカラムの値をオブジェクト形式でし出力、タイムスタンプを取得します let setTime = new Date(element.time).getTime(); //読み込み時と出力時の差分のミリ秒を計算します。 let tweetTime = (setTime - dateTime)+1000; if(dateTime < setTime){ //setTime分だけ、実行を遅延させます(予約投稿) setTimeout(function(){ tweet(element.content); },tweetTime); }else{} }); })); |
かわうそがオリジナルで追加しているのは、予約投稿機能に関わるところだけですね!
そこまで複雑なことはしておりません。
紹介してきた記事の中に、ほとんど答えはテンプレート形式であるかと思います!
皆さんも一度試してみてくださいね!