【TwitterAPI】ツイッターAPIを使って単語からツイートを抽出してみた（2019/12/01追記）

# はじめに
めちゃくちゃ不十分ですが、動きはしたのでとりあえず投稿します。
後で色々、修正します。(デバッグを消したコメントとか残ってるし・・・)

今の段階のものを作るのに大体40~50分という所。

## 2019/12/01追記
機能を整備しました。
まだ少し気になる所（APIの使用上最近のツイートしか取得できない、ツイートのURLを書き出したい、コードが汚い、サーバーに配置して自動で何かやりたい）はありますが、
他にも作りたいものがあるので一旦完成ということに。

# コード

```ruby
require "twitter"

client = Twitter::REST::Client.new do |config|
  config.consumer_key = 'キーが入ってる'
  config.consumer_secret = 'キーが入ってる'
  config.access_token = 'キーが入ってる'
  config.access_token_secret = 'キーが入ってる'
end


def getTweet(client,word,num,array,shortFlg)
  client.search(word).take(num).each do |tweet|
	  if shortFlg == 1
		  array.push({text: tweet.text[0..9] + "...", favo: tweet.favorite_count})
	  else
		  array.push({text: tweet.text, favo: tweet.favorite_count})
  	  end
  end
end

tweets = []
word = "エンジニア"
getNum = 3000
getTweet(client,word,getNum,tweets,1)
tweets.sort_by!{ |twi| twi[:favo] }.reverse!

roopNum = tweets.length - 1
for num in 0..roopNum do  
  if tweets[num][:favo] >= 10
        File.open("ITfashion.txt", "a") do |f|
          if tweets[num][:text].include?("#")
            f.print (tweets[num][:text]).delete(word)
		  else
            f.print (tweets[num][:text])
          end
            f.print " "
            f.print (tweets[num][:favo]) 
            f.puts "いいね"
        end
  end
end
```

# 説明

## getTweet(client,word,num,array,shortFlg)

```ruby
def getTweet(client,word,num,array,shortFlg)
end
```

ツイートの取得〜配列の作成まで行ってくれるメソッド。
client = 自身のツイッターAPIのキー
word = 取得したいキーワード
num = 検索するツイートの数
array = ツイートを格納する配列
shortFlg = ツイートを書き出したときに短縮するか否か

## client.search(word).take(num).each do |tweet|

```ruby
client.search(word).take(num).each do |tweet|
```

ツイッターAPIではsearchメソッドを使い、
ツイートを検索することができるので、先ほどの引数を元にツイートを検索しています。
単発ではダメなのでeachで回している。

## if shortFlg == 1 〜

```ruby
if shortFlg == 1
  array.push({text: tweet.text[0..9] + "...", favo: tweet.favorite_count})
else
  array.push({text: tweet.text, favo: tweet.favorite_count})
end
```

tweet.textでツイート内容を取得できるのですが、
shortFlgが1なのか、他のものなのか？
で判断して1ならtweet.textの最初から10文字に...を付け加えるようにしています。
そうでなければ、ツイートの文字を全て取得。

## tweets = []

```ruby
tweets = []
```
ツイートを格納する配列の宣言。
なかったらエラーになる。

## word = "エンジニア" getNum = 3000

```ruby
word = "エンジニア"
getNum = 3000
```

変数に値を入れている。
wordに検索したい言葉、getNumに検索したい数。

## getTweet(client,word,getNum,tweets,1)

```ruby
getTweet(client,word,getNum,tweets,1)
```

ツイートを取得して配列に格納するメソッドの実行

## tweets.sort_by!{ |twi| twi[:favo] }.reverse!

```ruby
tweets.sort_by!{ |twi| twi[:favo] }.reverse!
```

配列tweetsをいいね数順で並び換えています

## roopNum = tweets.length - 1

```ruby
tweets.length - 1
```

ここからツイートをテキストファイルに書き込む処理に入るのですが、
for文でツイート数と同じ数を描きたかった。
良い方法が思いつかなかったので、tweets.lengthより１小さい数字（０スタートなので）
を変数に格納。

## if tweets[num][:favo] >= 10

```ruby
if tweets[num][:favo] >= 10
end
```

いいね数が極端に少ないものを書き出しても仕方ないので、
10いいね以上のものを書き込むように指定。

## File.open("ITfashion.txt", "a") do |f|

```ruby
File.open("ITfashion.txt", "a") do |f|
  f.print 書き込みたい文字
  f.puts 書き込みたい文字
end
```

こちらのメソッドを使うとターミナルに文字出力するような
感覚でITfashion.txtというテキストファイルに書き込んでくれます。
右の"a"という引数は書き込みモード。

## if tweets[num][:text].include?("#")

```ruby
if tweets[num][:text].include?("#")
```

ハッシュタグがある場合、出力したテキストからはハッシュタグは取り除きたい。
なので#を含むか否かで条件分岐しています。

## f.print (tweets[num][:text]).delete(word)

```ruby
f.print (tweets[num][:text]).delete(word)
```

↑で書いたハッシュタグを消すための実際の処理。
rubyの.deleteメソッドを利用している。

# サンプル：word = "エンジニア" num = 3000 で取得したテキスト

## shortFlg = 0

```
JK「未経験なんだけど、最初は何がいいかな」

エンジニア「やっぱCからでしょ」

JK「ちょ、はやまりすぎじゃね？」 330いいね
人はなぜ、もう一軒行くのだろうか…

下北沢GARDENに集まってくれた皆さん、ありがとね。楽しかったなー！
おかげで久々にメバー全員でスルー・ザ・ナイト。『#RAMBLE 』デザイナーのA萬氏、PAN林氏も道連れ。起… https://t.co/F7ZGpEeFPD 86いいね
昨日ごはん食べてたとき、隣のテーブルでフリーランスのエンジニアやってるっぽい男性が女性に対して「フリーランスエンジニアは楽でいい」「年収数千万円も簡単」「これからの時代の生き方」みたいなこと力説してて、それで女性はキラキラした目でその話聞いててなるほどなぁって思ってた 85いいね
僕の個人的見解ですが、エンジニア界隈って、学校で言うと

・昼休みにいつも同じ人達で固まってマニアックな話をして「俺達って凄いよな」と狭い世界で自己満足しているガリ勉集団

みたいなものなので、その中だけで頑張るよりも、クラスや学… https://t.co/DoNxpj4p3O 81いいね
【特報】はまあこばこコンピレーションアルバム発売決定！

はまあこんぴ
2020.1.12 Release

☆参加アーティスト☆
はるかぜ・Lana・藤田充・Moa・永遠の鱈子、・MAST・TryAngle

全15曲 1,00… https://t.co/sPXx7DLvLR 78いいね
#載せ忘れ
12012でもMoreでもC did it.でもお世話になってるです❦さー今日は西川口！ https://t.co/GloRgebA2U https://t.co/LSjjt0c6PY 63いいね
近年のテープ使用といえばCD7枚組『マジンガーZ / INFINITY(特装盤)』。当時のオープンリールテープを再生してそのままマスタリングしたいと制作担当の人に言われた時は驚いた。テープの劣化で何度も回せないから、音質の決定は早… https://t.co/TAptUYnEAA 63いいね
#phpcon PHPカファレス2019 Track 4 14:10〜 から発表する資料です / 知見のない技術スタックをプロダクショ導入するの導入戦略 / A strategy to choice no kno… https://t.co/aynZk6BS1n 59いいね
これらの方法で、再生はムリだよという状態のテープを、スタジオにいる人や、エンジニアさんの知恵とテクニックによって乗り切ることができて、CDにしたことは少なからずありました。それぞれのやり方はあるようだったから、まだ他に方法があるのかもしれないですけど。 58いいね
本当にエンジニア不足なんですかね？
SESの面接官なんてエンジニアリング力を定性的も定量的にも測る技能なんてないのに、なぜ落ちるのか https://t.co/DdCtsHEljd 39いいね
プログラミングスキルをつけて、それを利用し起業&amp;最年少上場を目指すって意気込んでたうちのメンバーが、突如『世界一周する旅人になりたいです』と言い出しました。

結果「旅するエンジニア(2020年始動予定)」が弊社内で爆誕したことを… https://t.co/6XNC8PQS5f 37いいね
ご紹介頂きました〜ありがとうございます！😁✨

まあ日本人のやっているエンジニア特化型チャンネルとしては僕のチャンネルのご登録者数がトップではあるのですが、3万はやっぱり少ないよなあと思うので、来年はなんとか一気に10万突破したい… https://t.co/UxYrN674zf 36いいね
恋人もいて幸せなエンジニアの皆さま！おはようございます👀 https://t.co/MZMdPljZky 32いいね
募集要項なんて、あくまで建前なので、要件満たしてなくても突撃するのが吉。

こっちにデメリットないからね！

フリーエンジニアでも、
『PHP1年以上』『Ruby3年以上』

↑腐る程見たけど、あんま関係ない。

僕なんて、実務未… https://t.co/RgB12PVciw 29いいね
35歳定年説なんて
『体力にまかせて仕事してる』
って人ならエンジニアじゃなくても営業だろうが経営者だろうが35歳で定年だよ 28いいね
昨日の、30歳以下の向けカファレス #DevBoost の
参加者のブログ記事が上がってる😍

私の基調講演についても触れてくださっていて嬉しいです☺️ありがとうございます！

「若いの可能性を広げるキャリ… https://t.co/la5ydjYfOL 27いいね
言いにくいけど頭良さそうなら通る
し馬鹿そうなら通らない

プログラミングの実力と人間性・社会人としてちゃんとしてるか成長できそうか

3:7くらいで見られてると思う

未経験からエンジニアになれた人はビジネススキルは高い人が多か… https://t.co/7tV6pzCU9K 25いいね
エンジニア転職で、未経験でも採用されたいなら、自分の採用コストを極限まで下げる必要がある

例えば、「初めの3ヶ月間はアルバイト程度の給料で雇ってもらう」とかである

何か大きいものを得るためには何かを捨てる必要がある

全て投資… https://t.co/6wBKSHeIB8 25いいね
エンジニアにおすすめなYouTuberとして取り上げられました！嬉しいですね〜。

https://t.co/gHwjDD7eq8 25いいね
横浜の用事ついでに立ち寄った原鉄道模型博物館。

ジオラマと装飾はまだしも、駆動系、イコライザも全て手造りって…

コクヨで自動組み立て機とか開発したエンジニアだったらしい。
ギターどうこうの世界じゃないな。 https://t.co/L9TV62da4D 24いいね
いいプレイヤーがいいマネジメントになるわけではない。ってのがエンジニアに限らずスポーツでも当たり前だと思うんだが、何でこういう発想になるんだろうな
自分が出来ることと、人に教えることは全く違う方向のスキルセットなんだよねぇ 24いいね
「エンジニア採用の調子が良い」って言える状況になったの感無量な感ありますね。CTOをはじめとしてみんなコツコツ積み重ねてきた成果が出ていてすごい(\\( ⁰⊖⁰)/) / “メドピア株式会社で働いてます - Hack Your D… https://t.co/uDc46NNI6S 24いいね
と仲良くなれるデザイナーになりたい話｜きなこ @AsukaOkochi #note https://t.co/VD0ZhrI3Be

@OthloTech Advent Calendarの1日目の記事です！
長期開発っ… https://t.co/4TbqL3Q75i 24いいね
リプに100社120社応募しているという話があるが、エンジニアが不足しているんじゃなくて、いもしないスーパーフルスタックエンジニアかあるいは末端IT土方が不足しているだけで、並のエンジニアは余っているということだね https://t.co/ACaqszC3YS 22いいね
アドベントカレンダー始まりました。今年は一日目を書かせてもらいました。災害関連情報サービスに向き合っているエンジニアとデザイナーの話です。普段あまり注目されないですが真摯に向き合っています。 https://t.co/jjj6o3PrHz 22いいね
フリーランスやエンジニアが儲かるって聞いて興味湧いちゃう人たちは現時点で稼いでる金額が少ない状態である場合が多いので「月50万以上！」という言葉に飛びついてる可能性を否定できない

売上ー経費＝利益
利益ー税金＝手元に残るお金

こんな仕組みも知らない人が大多数 21いいね
ギャルエンジニア「FQDNってなに？DQNの友達？」 21いいね
今日はここで中島聡さんと対談😀
エンジニアとビジネスの先輩としてすごく刺激をもらってるので楽しみ🤩 https://t.co/PYeXbHzk7v 21いいね
エンジニア「リモートはコミュニケーションしんどいからフリーランスでノマドワーカーよりもちゃんと会社員やって出勤して仕事するべき」

上流工程の人「オフショアは扱いづらい」 20いいね
おはようございます。
#今日の積み上げ 宣言です。

・面談イベト
　「ギークフェスタ@京都」

昨日に引き続き、京都にてサポーターズさん主催の就活イベトです。

今日はどんな刺激を受けれるのか、とても楽しみです😆… https://t.co/oRXv4IMilM 19いいね
数年前PHP養成読本のPHPUnitの章を書いた人と、20年近くPHPUnitを作ってる人です #phpcon https://t.co/d0eb4Cvlow 19いいね
ドイツのフライト ャケット
カゴール です。
#写真のデキがイマイチ
#裸眼だとこーなる https://t.co/fGcOqge99k 19いいね
ちなみに今職務内容としてブロック チェーン エンジニアやってるけど、入った時の立場はAndroidエンジニアだったりするw

協力会社に作らせてたブロックチェーン関連が上手くいってないって聞いて、僕が全部設計からやり直すチャンスだと思った。

思惑は100％的中した😆 18いいね
エンジニアの会話は死ぬ、殺すが普通に出てきます。
（プロセス 18いいね
エンジニアは早く起きれない人が多いイメージなんだけど、カンファレンスとか技術書典だとめっちゃ早起きできる感じは、遠足の日だけ早起きできる学生と同じですか？🙋‍♀️ 18いいね
昨夜、勝又さん(@poly_soft )の雑食系エンジニアサロン に入会しました。
早朝にはSlack招待きてて仕事はやっ！となてゆ🤭
とりあえず、わいみたいな
❌金なし
❌コネなし
❌経験なし
❌スキルなし
❌忍耐力なし
のぼん… https://t.co/xJVZOQPhut 15いいね
大手に転職するプラントエンジニア
弊社に残留するプラントエンジニア
中小に転職するプラントエンジニア

今夜三者三様の電気計装エンジニアが集う。 15いいね
野心的な人間は最も怯えた人間です。なぜなら、彼はあるがままの自分を恐れていて、「もし私が今のままだと、私は何者でもないことになってしまう。だから何者かにならなければならない、エンジニアに、医者に、大臣にならなければならない」と言っているからです。(クリシュナムルティ) 14いいね
Web プログラミグ職業訓練の選び方について記事を書きました。
受けるかどうか悩んでいる人は参考にしてみてください！
#プログラマ # #プログラミグ #駆け出しと繋がりたい
#ブログ #ブログ更新… https://t.co/xcBlSUG4nQ 14いいね
本日はLINEの新宿オフィスにて、メルカリ・クックパッドと3社合同で新卒エンジニア採用説明会を開催中。約90名の学生さんにご来場いただき、各社からの概要説明と、各社の様々なエンジニアの話が聞けるブース訪問タイムを設けています。ご参… https://t.co/wkNTaKmavI 14いいね
パイロット仲間、エンジニアさんの活躍をTwitterで知る朝。

皆さん、素晴らしいなぁと、朝から幸せな気分に✨

私は、届いた早摘みレモンで、なにか作ろうかなぁ😌 14いいね
Python3認定基礎試験受かりました！！
#Python
#プログラミグ初心者
#駆け出しと繋がりたい https://t.co/TfVEvPFmhe 13いいね
今、エンジニアって聞いて小田切が「やっぱり」って言ったけど？？？？？ 12いいね
エンジニアに限らず、こういった教育者が増えてくれると嬉しいですね。 https://t.co/I4WvoNz2LJ 12いいね
リブセンスの社内のSlackで、エンジニアたちが
｢湯河原で開発合宿｣
｢足湯駆動開発｣
とかやってて激しくぐぬぬ。

しかたないので、今日は都内で銭湯ソロ活キメてこようかな😇♨️ 12いいね
「SEがプログラミングしたら負けだって日本のICT業界のガリバー企業が言ってた。専業ICTエンジニアだったワイも同感である。」 https://t.co/6wAAbGdSYJ https://t.co/7FCASbKJfo 11いいね
LINE・メルカリ・クックパッド 新卒採用説明会
受付はじまったぞい💪🏻
#lmc1201 https://t.co/rMbp68m8uf 11いいね
寮同窓会に行ったら2年ぶりに会う友人達が「仕事中にもアロゲの事結構思い出して、こういう奴が活躍できる社会にせんとあかんねんなって思うもん」「いや、俺は残当やと思うけどな」とか言ってきて、いやお前らはなんやねん俺は神エンジニアやぞ！ってなった。 11いいね
僕はエンジニアではないけど
日本人のやってるエンジニア系YouTuberの登録者数トップで、かつ発信してる情報も参考になるのに、登録者3万人って事を考えると、やっぱエンジニアやプログラミングに関心ある人は、まだまだ少ないのかなぁと… https://t.co/TzzTPTRyMP 11いいね
#転職 #就職 を検討中の方へ

将来的に有望視されている

ITに無料でなれる

チャス！ 地方から出てきても

受講中の宿代がなんと無料！

#就活 #ITCEカデミー は

未経験から #IT として… https://t.co/NtPygm8pa7 11いいね
アドベントカレンダー1日目の記事書きました！！
エンジニアからプロダクトマネージャーになっての気付き - BASE開発チームブログ https://t.co/iSxN2P9s6y 10いいね
プログラミング学習開始から1ヶ月。
Progate、ドットインストール、書籍等、色々手を出しましたが、今のところ「書籍をメインにし、udemyで補完」という感じでPHPとMySQLを勉強しています。

先輩エンジニアの方々の有意義… https://t.co/LsMaBuNoWh 10いいね
精神年齢が小学生レベルのエンジニアが多いってことよ。

俺も例に漏れず https://t.co/nYpZg0qed0 10いいね
結婚祝いお礼紹介Part.33

おり@駆け出しさん@KO60493792

プログラミグ❎筋トレ‼️信者🤪 むらっしゅさん（
@MSmurash
)の #プロサー 7期生🔰💻🔰 #駆け出しと繋がりたい プ… https://t.co/twP6OG6c3j 10いいね
「この仕事は本当に人間がやらなければいけないんだろうか？自動化できたらみんなハッピーにならないのかな？」そんなことを考えながらテナを張ることがにとってはとても大事。
#プログラミグ学習 #駆け出しと繋がりたい #TechBaton 10いいね
ミニアルバム 「DREAMER」＆ オリジナルギターピック通販にて販売中❤️
https://t.co/gAfNo8KhJD
テイラースイフトグラミー賞受賞作品のエンジニア在籍スタジオL.A.ノースハリウッド「Krazy Pop Studio」にて収録！
ぜひゲットしてね 10いいね
```

## shortFlg = 1

```
JK「未経験なんだけ... 335いいね
人はなぜ、もう一軒行... 86いいね
昨日ごはん食べてたと... 85いいね
僕の個人的見解ですが... 81いいね
【特報】はまあこばこ... 79いいね
#載せ忘れ 
120... 64いいね
#phpcon PH... 60いいね
本当にエンジニア不足... 40いいね
プログラミングスキル... 37いいね
ご紹介頂きました〜あ... 36いいね
恋人もいて幸せなエン... 32いいね
募集要項なんて、あく... 30いいね
35歳定年説なんて
... 28いいね
昨日の、30歳以下の... 27いいね
エンジニア転職で、未... 25いいね
エンジニアにおすすめ... 25いいね
言いにくいけど頭良さ... 25いいね
いいプレイヤーがいい... 24いいね
「エンジニア採用の調... 24いいね
エンジニアと仲良くな... 24いいね
横浜の用事ついでに立... 24いいね
アドベントカレンダー... 23いいね
リプに100社120... 23いいね
今日はここで中島聡さ... 21いいね
フリーランスやエンジ... 21いいね
ギャルエンジニア「F... 21いいね
数年前PHPエンジニ... 20いいね
エンジニア「リモート... 20いいね
おはようございます。... 19いいね
ドイツのフライト ジ... 19いいね
エンジニアは早く起き... 18いいね
ちなみに今職務内容と... 18いいね
エンジニアの会話は死... 18いいね
大手に転職するプラン... 15いいね
昨夜、勝又さん(@p... 15いいね
野心的な人間は最も怯... 14いいね
本日はLINEの新宿... 14いいね
Web プログラミン... 14いいね
パイロット仲間、エン... 14いいね
Python3エンジ... 13いいね
リブセンスの社内のS... 12いいね
エンジニアに限らず、... 12いいね
今、エンジニアって聞... 12いいね
LINE・メルカリ・... 11いいね
「SEがプログラミン... 11いいね
僕はエンジニアではな... 11いいね
寮同窓会に行ったら2... 11いいね
#転職 #就職 を検... 11いいね
ミニアルバム 「DR... 11いいね
結婚祝いお礼紹介Pa... 10いいね
母親がアメリカへ引っ... 10いいね
プログラミング学習開... 10いいね
「この仕事は本当に人... 10いいね
アドベントカレンダー... 10いいね
精神年齢が小学生レベ... 10いいね
```