Open3
Twitter API使ってbot作ったらシャドウBANされちゃった話
どういうBot作ったの?
簡単に言うと にじさんじ に所属しているバーチャルライバーがYouTubeにアップロードした歌ってみた動画の告知ツイートをするBot
どんなツイートをするの?
毎日17時に歌ってみた動画のタイトル、公開時間、視聴URLを含んだツイートをする。
理由は、歌ってみた動画はプレミア公開される場合が多く、公開時間が17時以降になる場合が多いためです。
当日公開される動画がない場合は、何もツイートしません。
なんでシャドウBANされちゃったのか?
現在、明確な理由は分かっていないです...
ただ、色々試してみて「これが原因かも!」と思っている点があります。
外部URLとハッシュタグを同時に使う
原因かもって思っていることは、「外部URLとハッシュタグを同時に使う」ことです。
理由は、
- シャドウBANされる前に動画のタイトル、公開時間、視聴URL、ハッシュタグを含めて自動ツイートした後、他のTwitterアカウントでハッシュタグ検索したが、ツイートが表示されていなかった。
- その後、動画のタイトルなどを変えて同時に2回ツイートしたが、そのツイートも表示されていなかった。
- その後、シャドウBANされているか確認したところ、しっかりシャドウBANされていた...
- Twitterアカウントを作り直して、今度は、ハッシュタグを除いてツイートした後、他のアカウントから検索するとツイートが表示されていた。
- ツイートをした後、動画のタイトルなどを変えて同時に2回ツイートしたが、そのツイートも表示されている事を確認した。
- その後、シャドウBANされているか確認したところ、シャドウBANされていなかった。
以上のことを含めると、外部URLとハッシュタグを同時に使うと、シャドウBANされるのではないかと思う。
しかし、他の人が作ったBotのツイートを見ると外部URLとハッシュタグが付いているものもあるので、まだ色々調べる必要がありそう。
自作Bot ソースコード
import Twitter from "twitter";
import { Status } from "twitter-d";
import { Videos } from ".prisma/client";
import { format_date } from "../get_times";
export default async function (q: { video: Videos[] }) {
const client = new Twitter({
consumer_key: process.env.TWITTER_API_KEY || "",
consumer_secret: process.env.TWITTER_SECRET_API_KEY || "",
access_token_key: process.env.TWITTER_ACCESS_TOKEN || "",
access_token_secret: process.env.TWITTER_ACCESS_TOKEN_SECRET || "",
});
if (!q?.video) {
throw "not exist videoId";
}
const hashTag = "#にじさんじ #歌ってみた"; // タグは使わない
console.log("----- video tweet -----");
for await (const video of q.video) {
const startTime = format_date({
date: video.startTime,
format: "MM/DD HH:mm 公開"
});
const msg = `
[${startTime}]\n${video.title}\nhttps://www.youtube.com/watch?v=${video.id}
`;
console.log("videoId=", video.id);
console.log(msg);
const res = <Status>(
await client.post("statuses/update", {
status: msg
})
);
console.log(res);
}
console.log("----- complete -----");
}