2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【tweepy】Re:ゼロから始めるTwitterBot開発生活 #1【python】

Posted at

#初めに
tweepyのインストールはすでに終了してるという前提で話を進めさせていただきます。

※主はプログラミング歴数か月の初心者です。ところどころ知識不足が目立つかもしれませんが温かい目で見守っていただけると幸いです。

#開発環境
python-3.8.5
tweepy-3.9.0
editor-Atom

#プログラミング初心者の方へ
主は初心者といえど多少の経験はあります。
完全に初心者という方は、ほかの記事等を見て、基礎知識を身に着けてからまた戻ってきてください。

#本編
それでは本編です。

##コード

###必須コード

import系
import tweepy
Token系
CONSUMER_KEY = "ここに対応する文字列を入力"
CONSUMER_SECRET = ""
ACCESS_KEY = ""
ACCESS_SECRET = ""
その他
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_key, access_secret)
api = tweepy.API(auth)

###実際に書いていくコード
今回は、リプライ、リツイートを除いたツイート10件をprintするコードを書いていきます。

全体
a = 0
public_tweets = api.home_timeline()
for tweet in public_tweets:
    if a < 10:
        if tweet.text[:2] == 'RT' or tweet.text[:1] == '@':
            pass
        else:
            print(' ')
            print('-----------------')
            print(' ')
            print(tweet.text)
            a += 1

#####解説

1行目
a = 0

動作を10回行ったら終了するために必要な定義。

2行目
public_tweets = api.home_timeline()

api.home_timeline() の呼び出しを楽にやるために public_tweets にぶちこんでます。

3行目
for tweet in public_tweets:

tweet っていう変数に取得したツイートのオブジェクトをぶちこむやつです。

4行目
if a < 10:

動作を10回で抑えるためのチェック。
1行目必須。

5,6行目
if tweet.text[:2] == 'RT' or tweet.text[:1] == '@':
    pass

リツイートまたはリプライのツイートだった場合に無視する用のやつ。
基本的に、リツイート、リプライのツイートを tweet.text でprintすると
RT @ユーザーID メッセージ内容
または
@ユーザーID メッセージ内容
って感じで、最初にRTまたは@がつくのでそれを判断する用です。

7~12行目
else:
    print(' ')
    print('-----------------')
    print(' ')
    print(tweet.text)
    a += 1

else: は、5,6行目の条件に当てはまらなかったら動作するってやつ。
printの上三行は取得したツイート内容の区別をわかりやすくするためのやつなのでなくても一応大丈夫。
print(tweet.text) は、ツイート内容をprintするってやつ。
a +=1 は、aっていう変数の数値を1プラスするってやつ。
何回動作したかの確認のために必須のコード。

ちなみにこれを動作させると、


-----------------

メッセージ内容1(念のため隠します)

-----------------

メッセージ内容2(念のため隠します)

-----------------

メッセージ内容3(念のため隠します)

-----------------

メッセージ内容4(念のため隠します)

-----------------

メッセージ内容5(念のため隠します)

-----------------

メッセージ内容6(念のため隠します)

-----------------

メッセージ内容7(念のため隠します)

-----------------

メッセージ内容8(念のため隠します)

-----------------

メッセージ内容9(念のため隠します)

-----------------

メッセージ内容10(念のため隠します)

ってなります。

###次に
次は、ユーザー名を表示する機能を追加していきます。
実行結果が

-------

ユーザー名
|
ツイート内容

-------
.
.
.

となるようにしていきます。
では早速コードを書いていきます。
ゆうてちょっと追加するだけなのでそんな難しくないと思います。
はいコードぽん

a = 0
public_tweets = api.home_timeline()
for tweet in public_tweets:
    if a < 10:
        if tweet.text[:2] == 'RT' or tweet.text[:1] == '@':
            pass
        else:
            print(' ')
            print('-----------------')
            print(' ')
            print(tweet.user.name)
            print('|')
            print(tweet.text)
            a += 1

7行目までは一緒なのでぶったぎって、ポン

print(' ')
print('-----------------')
print(' ')
print(tweet.user.name)
print('|')
print(tweet.text)
a += 1

変わったところは、4,5行目だけ!
しかも追加だけ!削除なし!
これは特に解説する必要がない気がするのでパスで。
実行結果はこんな感じ

実行結果

-----------------

ユーザー名1(ユーザーIDではない)
|
メッセージ内容1(念のため隠します)

-----------------

ユーザー名2(ユーザーIDではない)
|
メッセージ内容2(念のため隠します)

-----------------

ユーザー名3(ユーザーIDではない)
|
メッセージ内容3(念のため隠します)

-----------------

ユーザー名4(ユーザーIDではない)
|
メッセージ内容4(念のため隠します)

-----------------

ユーザー名5(ユーザーIDではない)
|
メッセージ内容5(念のため隠します)

-----------------

ユーザー名6(ユーザーIDではない)
|
メッセージ内容6(念のため隠します)

-----------------

ユーザー名7(ユーザーIDではない)
|
メッセージ内容7(念のため隠します)

あれ?7個しかツイートが取得できてない??
そうなんです。今回はツイートが7個しか取得できていないんです。
考えられる原因は一つ、
#####この条件に合うツイートを10件取得しきる前に、そもそも取得できるツイートの数の限界が来てしまった
まあたぶんこれが原因でしょう。
あと何回かやってれば結果変わると思います。めんどくさいのでやりませんが。

###ラストオオオ!!!
最後に挑戦するのが、ユーザー名の右にTwitterIDも書く!!
これだけやって今回は終了としたいと思います。
では早速。
今回は思考から書いていきますよお

まず、ユーザー名とTwitterIDを同じ列に書きたいので、なにかしら変数を決めないといけないです。
(まあ変数使わなくてもやる方法はありますが)
今回は name という変数を使っていきます。

name = tweet.user.name

先ほどもやりましたが、これでユーザー名を取得します。
そして次。
UserIDを取得します。
どこから取得すればいいのかわからないのでObjectを探っていると...
screen_name という、それっぽいやつがありました。
試しにTwitterで検索してみると...

はい、うまくいきました。
(知らない人のUserIDなので画像なしです)
ということで、これを使えばTwitterIDを取得できるということがわかりました。
じゃああとは簡単ですね。
こいつらを結合して...

name = tweet.user.name + ':@' + tweet.user.screen_name

たぶんこれでいけるでしょう!
試しに実行してみた結果...

実行結果

-----------------

ユーザー名:@TwitterID
|
メッセージ内容1(念のため隠します)

-----------------

ユーザー名:@TwitterID
|
メッセージ内容2(念のため隠します)

-----------------

ユーザー名:@TwitterID
|
メッセージ内容3(念のため隠します)

-----------------

ユーザー名:@TwitterID
|
メッセージ内容4(念のため隠します)

-----------------

ユーザー名:@TwitterID
|
メッセージ内容5(念のため隠します)

-----------------

ユーザー名:@TwitterID
|
メッセージ内容6(念のため隠します)

-----------------

ユーザー名:@TwitterID
|
メッセージ内容7(念のため隠します)

-----------------

ユーザー名:@TwitterID
|
メッセージ内容8(念のため隠します)

-----------------

ユーザー名:@TwitterID
|
メッセージ内容9(念のため隠します)

-----------------

ユーザー名:@TwitterID
|
メッセージ内容10(念のため隠します)

はい、うまくいきました。そりゃそうですよね。

#最後に
では、今回はこれで終わりたいと思います。
次回は、作りたい内容が思いつき次第更新したいと思います。

Qiitaって書いてるとタイピングの安定性上がるし、文章力も上がる気がするのでいいですね。
人に教えることにより自分もさらに深く知ることができるし。
一石三鳥じゃないですか!

みなさんもぜひ記事を書いてみてくださいね!
では、ノシ

#Re:ゼロから始めるTwitterBot開発生活シリーズ
#1 当記事
#2 ※準備中※

・当シリーズが更新され次第、随時こちらも更新していきます。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?