WEB技術

puppeteer で twitter botを作るよ(使い道を考える)

ちなみに、ふつうに呟く方が楽だよ。

https://logzitsu.tlog.work/node-js-tweet/

puppeteerの使い道

すこーし考えてみました。
– ログインが必要なサービスでデータを取得し、定期的にメールさせる
– バックアップやアップデートの更新処理を勝手にやってくれるようにする
– サイトから画像・テキストを集める、めっちゃメールを送る
– 自分の代わりに投稿・更新させる

こんなところかなぁとおもいます。一番上の情報収集に関してはオンライン会計ソフトで、ログイン情報を入れれば各種サイトの情報を取得してくる処理で「ヘッドレスブラウザ(かもしくは近しい技術)」でやってるみたいです。
なるほどなーとおもいました。
会計ソフトの例もそうですが、「いろんなサービスを横断的に利用できる」のが結構強みかな、と思いました。
あと、人間を対象にしたものをどーにかこーにかするので、その分無駄が多いんですが、通常のプログラミングではややこしくめんどくさいところが結構無理やり解決できちゃうというか無視できちゃうんですごいです。高級言語って感じです。

AIだなぁって思った

人の代わりに人っぽいことをするものが「AI」だと思います。ブラウザを操って様々な作業をする。まさにAIですね。
自律的に作業してくれるところまでまだ全然行けてませんが、決まった時間に発動させるくらいは今の状態でもできそう。
3番目の「サイトから画像・テキストを集める、メールを送る」というのは完全にスパムの仕事ですね。
集めた情報を使って画像の学習させるとか、そういった基礎資料集めには向いてると思いますが、短絡的に使うと迷惑行為になりかねないなぁと思います。

メインのPCだとちょっときついよね

ずっと立ち上げて処理を行ってほしいので、サーバー上で動かすのがいいと思うんですがそのためだけに借りるのもなーと思います。
自宅にPCが余ってるのでそれを専用PCにしようかなと思っています。
synology NASで動かすのがもしかしたら一番いいのかも。気分が乗ったら試してみようかな。

DS216jにsshアクセスしてLinuxサーバーとして活用する方法
http://www.web-walker.info/ds216j-ssh/
追記:試してみましたが、chromeがうまく立ち上がらず断念。

自動投稿とかもできちゃうよね

wordpressにログインして、投稿するのも試してみました。
でも画像の投稿が非常に難しく・・・・。それがやりたかったので、実用化するにはまだ研究が必要そうです。(情報もない)
画像投稿ができるものならなんでもいいのでほかの何かを使いますかー。

で、本題なんですが、twitterで定型文の定時ツイートくらいなら簡単にできちゃうと思うんですよね。
試してみたいと思います。

やってみた

ログインがなかなかうまく行かなかず苦戦しましたが、なんとかなったです。

const puppeteer = require('puppeteer');

var user_name = "あかうんとめー";
var user_pass = "ぱすわーど";

function nowtime(){
    var d = new Date();
    var year = d.getYear()+1900;
    var month = d.getMonth()+1;
    var date = d.getDate();
    var hour = d.getHours();
    var minute = d.getMinutes();
    var second = d.getSeconds();
    d = year + "年" + month + "月" + date + "日" + hour + "時" + minute + "分でーす";
    return d;
}

(async () => {
    const browser = await puppeteer.launch({ args: ['--no-sandbox'] });
    const page = await browser.newPage();

    //twitter ログイン
    await page.goto('https://twitter.com/login');

    await page.type('.email-input',user_name);
    await page.type('.js-username-field',user_name);

    await page.waitFor(2000);
    await page.keyboard.press('Tab');

    await page.keyboard.type(user_pass);
    await page.waitFor(2000);
    await page.click('button[type="submit"]');
    await page.waitFor(2000);


    // ツイートする
    await page.goto('https://twitter.com/');
    await page.waitFor(5000);
    await page.click('button#global-new-tweet-button');
    await page.waitFor(5000);
    await page.keyboard.type(nowtime());
    await page.waitFor(5000);
    await page.click('button.js-send-tweets');
    //await page.screenshot({ path: './ss.png'});
    console.log(nowtime());

    await browser.close();
})();


最終的にうまくいったwaitの時間を入れてますがもうすこし調整できるかも。
スケジュールで実行してやれば定期的な宣伝ツイートとかもできちゃいますね

集中的な8週間のマンツーマン訓練で、最先端のAIエンジニアを目指す
https://logzitsu.tlog.work/node-js%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E5%AE%9A%E6%9C%9F%E7%9A%84%E3%81%AB%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B/
こちらの記事もおすすめ!