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

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

新規登録して質問してみよう
ただいま回答率
85.48%
while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

936閲覧

python tweepy.error 187につきまして

nisiya22

総合スコア16

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

1クリップ

投稿2019/08/13 11:10

編集2019/08/13 13:03

お世話になります。

現在tweepyからツイッターに自動でツイートするbotを作成しているのですがエラーコードが出て
先に進めずこちらから質問させてもらいます。

while True部分を入れなければtxtファイルの次の行を読み込むのですがwhile True:
を行うと最上段のみを読み込みつつ
tweepy.error.tweeperror: [{'code': 187, 'message': 'status is a duplicate.'}]
こちらが出てきます。
時間もツイートさせてるので同じ文章にならないと思うのですが何故かエラーがでてしまいます。
どなたか解決方法おしえていただけないでしょうか?

よろしくお願いいたします。

import os import time import tweepy import requests import lxml.html import datetime todaydetail = datetime.datetime.today() today = todaydetail.strftime('%m/%d %H:%M') def main(): with open("gene2.txt","r") as f: for line in f: temp = line.replace(" ","") message = line.split(",")[0] url= temp.split(",")[1] blog = temp.split(",")[2] response = requests.get(url) html = lxml.html.fromstring(response.content) product ={ "title":html.cssselect("span.item_name")[0].text_content(), "price":html.cssselect("span.price2")[0].text_content(), "product_status":html.cssselect("tr:nth-child(1) > td > font")[0].text_content(), } re = product["product_status"] if "check" in re: print (message + today + " " + blog) return (message + today + " " + blog) else: print(message) time.sleep(30) def Tweet(text): consumer_key = os.environ['Consumer_Key'] consumer_secret =os.environ['Consumer_Secret'] access_key = os.environ['Access_Key'] access_secret = os.environ['Access_Secret'] auth = tweepy.OAuthHandler(consumer_key,consumer_secret) auth.set_access_token(access_key,access_secret) api = tweepy.API(auth) api.update_status(text) if __name__=="__main__": while True: Tweet(main()) try: Tweet(main()) except tweepy.TweepError as error: if error.api_code ==187: print('duplicate message') else: raise error

エラーメッセージ

Traceback (most recent call last):
File "test2.py", line 66, in <module>
Tweet(main())
File "test2.py", line 61, in Tweet
api.update_status(text)
File "/Users/magic12/scraping/lib/python3.7/site-packages/tweepy/api.py", line 195, in update_status
)(post_data=post_data, *args, **kwargs)
File "/Users/magic12/scraping/lib/python3.7/site-packages/tweepy/binder.py", line 250, in _call
return method.execute()
File "/Users/magic12/scraping/lib/python3.7/site-packages/tweepy/binder.py", line 234, in execute
raise TweepError(error_msg, resp, api_code=api_error_code)
tweepy.error.TweepError: [{'code': 187, 'message': 'Status is a duplicate.'}]
ERROR: exit status 1

Aratanwb👍を押しています

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2019/08/13 12:38

コードがインデントがなく見づらいので「コードの挿入」にて編集お願いします。 エラーメッセージは全文載せていただけませんか?
mokemokechicken

2019/08/13 12:46

インデントが定かではないので、なんとも言えないですが、main() は 1つのテキストしか返さない気がするので、同じテキストをツイートすることになりそうな気がしますね...
nisiya22

2019/08/13 13:03

ご連絡ありがとうございます。 修正いたしました。
guest

回答1

0

ベストアンサー

いくつか気になりましたので。
下記で「message = line.split(",")[0]」とありますが、「message = temp.split(",")[0]」ではなくて大丈夫ですか?

Python

1for line in f: 2 3 temp = line.replace(" ","") 4 5 message = line.split(",")[0] 6 url= temp.split(",")[1] 7 blog = temp.split(",")[2]

下記は無限ループですが、breakしなくて良いのですか? main()内では"gene2.txt"を読み込むところから再度実行されるかと思います。

Python

1while True: 2 Tweet(main())

投稿2019/08/13 13:04

meg_

総合スコア10580

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nisiya22

2019/08/13 13:07

ご回答ありがとうございます。 message = temp.split(",")[0]は修正いたします。 ありがとうございます。 なるほど、それでエラーが出た場合最上段に戻ってしまうんですね。 エラーが出た場合次段に進む方法って無いのでしょうか?
meg_

2019/08/13 14:14

ローカル変数は関数を抜けると消滅します。そのためreturn文で変数や値を返します。 今回エラーが出ているのは同じメッセージ(修正前のコードでは読み込んだテキストの1行目全体)を2回目に送ったときかと思われます。 対応としては、 1.Tweet(text)の機能をmain()のforループ内に入れる 2.テキストファイルからデータを全て抜き出す → while True: 内で1メッセージずつTweetする でしょうか。 「if "check" in re: print (message + today + " " + blog)」のprintで同じメッセージが2回出ていませんか?
nisiya22

2019/08/13 14:40

meg_様 誠にありがとうございます! 上手く動かすことが出来ました。 1.Tweet(text)の機能をmain()のforループ内に入れる こちらを修正し完成することができました。 誠にありがとうございます! 1
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問