質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.13%

python tweepyでのリプライを除く自動いいね

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,086

pentell

score 8

下記サイトを参考に、tweepyで指定したワードを@IDリプライを除くツイートのみを自動いいねするものなのですが、エラーが出てしまいます。
http://s4t.hatenablog.com/entry/2017/12/27/235241

エラー文
NameError: name 'dic' is not defined

tweepyの普通のツイートやフォローなどはちゃんと動きAPIキーも間違いないです。
こちらのサイトではない通常の指定ワードいいねはちゃんとできるのですが、@ID返信リプを除くツイートのみをいいねするものがこちらのサイトしか見つけられなかったのですがこちらのエラーの原因はなんなのでしょうか?
@ID返信リプを除くツイートのみを自動いいねするにはどうしたら良いのでしょうか。

~以下コード~
※ツイッターAPIの××××のみ任意のものに変更しています。

import tweepy

def api():


  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)

    return api

dic={}
for tweet in api().search('通貨'): 
 text = tweet.text 
id = tweet.id 
dic.update({id:text}) 
if '@' in dic[id]: 
 pass
else:  
 api().create_favorite(id)
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • CHERRY

    2019/06/06 06:50

    ソースコードは、コード部分を選択して、ツールバーの <code> ボタンを利用するなどの方法で見やすく記述していただけないでしょうか。  [ソースコードを書きましょう]( https://teratail.com/help/question-tips#questionTips3-5-1 ) 参照
    特に Python は、インデントがずれると別の意味になりますので、正しいインデントで記載をお願いします。

    キャンセル

回答 2

checkベストアンサー

+1

-追記-

参考リンク先に載っていたコードを改めてこちらに載せておきます。
インデントミスのないよう気をつけてください。

import tweepy

def api(): #関数apiを生成します。https://apps.twitter.com にて consumerkey等を取得して各自で代入して下さい
    consumer_key = 'consumer_key'
    consumer_secret = 'consumer_secret'
    access_key = 'access_key'
    access_secret = 'access_secret'
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_key, access_secret)
    api = tweepy.API(auth)
    return api

dic = {} #辞書を定義しておきます。

for tweet in api().search('仮想通貨'): #エゴサ用の単語を入れます。
    if tweet.retweeted == False: #リツイート”していない”ツイートだけを抽出。
        text = tweet.text #ツイートのテキスト部分を変数textに代入。
        id = tweet.id #ツイートの識別番号を変数idに代入
        dic.update({id:text}) #変数textと変数idの紐付けをし、辞書dicに追加。
        if '@' in dic[id]: #辞書dicにキーである変数idを代入し、テキスト本文を出力。@を含むツイート(リプライ)を除外。
            pass
        else:
            api().retweet(id) #リツイートする
     #api().create_favorite(id) どうせリツイートするならふぁぼっちゃえばいいじゃないですか。

-追記終わり-

dicを定義していないのが原因です。for文の前に空辞書dicを定義させれば実行できると思います。

dic={}

参考:特定の文字列を含むツイートをリツイートするやつ

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/06/06 19:18

    度々ありがとうございます。
    コードの方編集させていただいたのですが、
    return apiの前にタブを挿入してもインデントエラーとして扱われてしまうのですが、どうしたら良いのでしょうか。。

    File "<string>", line 15 return api ^ IndentationError: unexpected indent

    キャンセル

  • 2019/06/06 20:25

    コード拝見しました。returnの前にある文の段階で関数の外に出てしまっているのが原因ですね。

    回答の方に参考として紹介したgithubコードは見ましたか?改めて追記しておきます。

    修正意見にある通り、インデント1つでコードの実行内容は大きく変わってしまいます。
    returnの部分以外でもインデントエラーになりうる要素がいくつかありますので、回答に追記したコードを見て、ご自身で修正してみてください。

    キャンセル

  • 2019/06/06 22:10

    コード記載してくれていたとは大変助かりました。教えていただいたコードで無事できました。

    キャンセル

+1

色々分からないことだらけで頭悩ませていたんですが、とても丁寧に優しく教えてくださりコードまで記述していただき大変助かりました、この度は本当にありがとうございました!

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.13%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る