dlang
TwitterAPI
D言語
弱小PHPerのD言語挑戦記
More than 3 years have passed since last update.


D言語でTwitterBotに挑戦


せっかくだからDで何か実用的なものを組んでみたいなと思い、TwitterBotに挑戦

情報を集めたところ、Twitter4Dというものが

TwitterAPIはOAuthという認証方式をとっているらしく、いろいろと面倒

最初は全部自分で組もうかなと思ってましたが、すでにあるのならせっかくだし使ってみましょう

(正直、署名の作成とかかなり面倒そうですし)

ということで、組んでみたのがこちら

かなりやっつけなんで、頻繁にエラー吐いて止まったりします

このあたりはゆくゆく改良していくとして、まず詰まった点をいくつか


テキストファイル読み込み

これは一番迷いました

まず、ネットを探しても情報がほぼほぼ落ちていない

落ちているには落ちてるんですが、「テキスト読み込む程度、D言語erなら楽勝だよな」という感じで、深く触れられてません

結果、かなり戸惑い、調べました

結論から言うと、std.fileとstd.stringでだいたいのことが出来ました

PHPだとfile_get_contents()かsplFileObjectで大体できるので、最初はよくわからなかった...

import std.file, std.string;

string[] text = splitLines(readText("text.txt"));
string[] hoge;

foreach(int i, string line; text){
hoge[i] = strip(line);
}

一応、これでテキストファイルを読み込んで行ごとに配列に入れられます

まず、readTextでファイルの内容をstringで取ってきて、

次に、それをsplitLinesで行ごとに配列に入れる

最後に、(一応)foreachでstripを回して空白文字を詰める

こんなかんじです

追記


foreach回す部分ですが,std.algorithmのmapを使えばいいと思います


とのコメントをいただきました

tamy0612さん、ありがとうございます

アルゴリズムっていう名前でちょっと難しそうに思ってましたが、公式記事を見たところ便利なものがたくさんありました

また、


今回のsplitLines(readText("text.txt"))は最初に全部データを読み込んで一気に分割する方法なので,対象ファイルが小さい時は問題ないんですが,大きいと結構メモリを食ったりします.もし各行を順々に処理するような場合にはstd.stdioのFileを使って各行を読み込んで処理するということも出来ます


とのことです

この手の知識は本当にありがたいです

repeatedlyさん、ありがとうございます!


複数ファイルのコンパイル

「こんな初歩的なことw」と思うでしょうが、3時間ほど悩みました

$dmd hogehoge.d lib.d

これで複数ファイルのコンパイルができるんですが、main関数のあるファイルで

import lib;

と言った感じで、拡張子を除いたファイル名をimportしないといけないみたいです


TwitterAPIの制限

これはD言語は関係なく、純粋にTwitterAPIの仕様の話です

どうやら、過去10件のツイートに似たようなものがあると400エラーが返ってくるようです

こればかりはどうしようもないので、ツイートのバリエーションを増やすしかないのかなと

何か案があれば教えてくれると嬉しいです


ちなみに、作ったTwitterBotは留年した島村卯月botです

卯月、可愛いですよね(笑顔しか取り柄のない没個性とか言っちゃいけない)

精神的に辛くなった時は卯月の笑顔で癒やされたりします

1時間に1度つぶやくようにしてますので、もしよければフォローして見守って上げてください


追記:TwitterAPIで400エラーが帰ってくるのは、どうやらツイート内容に改行(\n)が入ってるからみたいです

ツイート数の制限と過去10件と似たツイートが弾かれた時は403エラーが帰ってくる様子

(このあたりはよくわかってないので、わかる方いましたらぜひ)