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

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

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

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Python

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

Q&A

解決済

1回答

1484閲覧

python 定期処理のエラー

hesitate.sheep

総合スコア7

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Python

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

0グッド

0クリップ

投稿2019/05/06 15:08

編集2019/05/08 13:19

ツイッターbotを使い、pythonの勉強をしています。

デベロッパーアカウントを取得し、MacBookにpythonの環境も構築して、実際にフォローやリツイートができるところまでできました。
そこで早速定期処理をやってみようとscheduleライブラリを使って見たのですがうまくいきません。

以下定期処理のプログラムです

import twitter_autoFavorite import schedule,time,datetime def job(): now=datetime.datetime.now() twitter_autoFavorite.main() print("<<DONE>>",now.strftime('%Y-%m-%d %H:%M:%S')) schedule.every(1/6).minutes.do(job) while True: schedule.run_pending() time.sleep(1)

以下エラー文です。

Traceback (most recent call last): File "Autoprogram.py", line 12, in <module> schedule.run_pending() File "/Users/me/.pyenv/versions/3.7.3/lib/python3.7/site-packages/schedule/__init__.py", line 563, in run_pending default_scheduler.run_pending() File "/Users/me/.pyenv/versions/3.7.3/lib/python3.7/site-packages/schedule/__init__.py", line 94, in run_pending self._run_job(job) File "/Users/me/.pyenv/versions/3.7.3/lib/python3.7/site-packages/schedule/__init__.py", line 147, in _run_job ret = job.run() File "/Users/me/.pyenv/versions/3.7.3/lib/python3.7/site-packages/schedule/__init__.py", line 466, in run ret = self.job_func() File "Autoprogram.py", line 6, in job twitter_autoFavorite.main() AttributeError: module 'twitter_autoFavorite' has no attribute 'main'

以下twitter_autoFavorite.pyのプログラムです。

# Tweepyライブラリをインポート import tweepy # 各種キーをセット CONSUMER_KEY = 'xxx' CONSUMER_SECRET = 'xxx' ACCESS_TOKEN = 'xxx' ACCESS_SECRET = 'xxx' auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET) #APIインスタンスを作成 api = tweepy.API(auth) q = "python" #ここに検索キーワードを設定 count = 5 search_results = api.search(q=q, count=count) def main(): for result in search_results: username = result.user._json["screen_name"] user_id = result.id #ツイートのstatusオブジェクトから、ツイートidを取得 print(user_id) user = result.user.name #ツイートのstatusオブジェクトから、userオブジェクトを取り出し、名前を取得する print(user) tweet = result.text print(tweet) time = result.created_at print(time) try: api.create_favorite(user_id) #ファヴォる print(user) print("をライクしました") except: print("もうすでにふぁぼしてますわ") try: api.create_friendship(username)#user_id print(user) print("をフォローしました") except: print("もうすでにフォローしてますわ") try: api.retweet(user_id) #RT print(user_id) print(tweet) print("をRTしました") except: print("もうすでにRTしてますわ") print("##################")

また、定期処理中は他のプログラムは実行出来ないのでしょうか?
色々初心者で申し訳ないですがよろしくお願いします。

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

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

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

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

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

hayataka2049

2019/05/06 21:27

エラーはそれで全文ではなく、もう少し情報がでていると思います。でたものはすべて掲載してください。
hesitate.sheep

2019/05/07 00:09

見直してみたら最後の一行が抜けておりました。 修正しましたのでご確認お願い致します。
hayataka2049

2019/05/07 00:16 編集

見てみました。とりあえず、twitter_autoFavoriteはなにものなのでしょうか
CHERRY

2019/05/07 01:00

参考にされた情報がある場合は、参照された情報の出典を記載していただけないでしょうか?
guest

回答1

0

ベストアンサー

実際にフォローやリツイートができるところまでできました。

twitter_autoFavoriteはふぁぼするものに見えますが、
こちらの動作確認は行いましたか。

AttributeError: module 'twitter_autoFavorite' has no attribute 'main'

twitter_autoFavoriteにmainが存在しないって言われていると思うので、
定期処理とは関係のないエラーだと思います。

投稿2019/05/07 03:00

yayakona

総合スコア69

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

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

hesitate.sheep

2019/05/07 04:48

Twitter_autofavoriteは色々調べてファボとリツイートとフォローがそれぞれできるように修正しました。 それ単体では問題なく動作確認できております。 なので定期処理の問題と思っていたのですがそうではないみたいですね。 実行した際に一度twitter_autoFavoriteの処理が完了し、scheduleに設定した時間で再度処理が行われようとするとこのエラーになります。 twitter_autoFavoriteのプログラムにmain()のような処理を書く必要があるのでしょうか?現在外出中なので必要であればそちらのプログラムも帰宅次第記載致します。 よろしくお願いします。
yayakona

2019/05/07 11:11

恐らく一度目実行出来ているのは、job関数の処理ではなくimport時の処理だと思います。 (importだけしても単体で実行した時と同じ挙動をするはずです) 質問の答えだけ返すとmain関数を作り、その中で行いたい処理を書いてあげれば意図する挙動になるはずです。 importや関数で検索すれば恐らく理解していけると思います。 つぃったーおーとふぁぼの中身見ていないため、間違っている可能性があるのでそこだけご了承ください。
hesitate.sheep

2019/05/08 13:30

ありがとうございます。 指摘された通りloop文のところをmain()で囲んで上げたところきちんと動作確認出来ました。 検索して調べてみたところmain()は非必須とありましたが丁寧に書いてあげないといけないということでしょうか...また、よろしければ定期処理中は他のプログラムは実行出来ないかの質問にもお答えいただけると幸です。現在ターミナル から実行しておりますが一般的にずっと付けっ放しでみなさん実行されているのでしょうか?大変初歩的な質問ですがよろしければご回答お待ちしております。
yayakona

2019/05/09 00:11 編集

> 検索して調べてみたところmain()は非必須とありましたが丁寧に書いてあげないといけないということでしょうか... ~~基本的に関数名は、それを見てどんな処理を行うものなのかを推測できるものである方が良いです。~~ ~~今回色々詰め込まれているので良い名前が思い付いきません。~~ 私なら適当に全部実行するイメージでexecuteAllとかつけてしまいますが、 ~~あまり推測できないのでよく無いと思います。~~ 非必須を非推奨と読みボケたことを言っていました。 申し訳ございません。 Cやjavaといったmain関数が必須な言語はありますが、pythonはそのような制約はありません。 > 複数プログラム動かせないの? パッと思いつくのは以下2点ですかね。 ・ターミナルを複数開く ・並列処理をする (公式docs:https://docs.python.org/ja/3/library/threading.html ) treadで検索してみるとわかりやすい解説が見つかると思います。 求められてるのは上の方かなと思うので、 こっちは簡単にできるはずです。 期待する回答じゃなかったらご指摘ください。
hayataka2049

2019/05/08 15:02 編集

@yayakonaさん 横やり失礼します。 @hesitate.sheepさん >調べてみたところmain()は非必須とありましたが 今回はtwitter_autoFavorite.main()という使い方をするので、main関数がないとmainが呼び出せません。別の名前でもいいのですが、呼び出し元と定義箇所で一致している必要はあります。 質問文にはられたコードにはあるように見えたのであれっと思って回答控えていましたが、「実際には書いてなかった」パターンでしょうか。 >一般的にずっと付けっ放しで ターミナルを複数開いて放置というのも、単純なものを動かすときはよくやります。 もう少し凝ったことをしたい場合は、バックグラウンド実行とか、daemonあたりのキーワードで調べると幸せになれるかもしれません。 https://qiita.com/inosy22/items/341cfc589494b8211844
yayakona

2019/05/08 15:24

@hayataka2049 さん いつも参考にさせて頂いています。 ご助力ありがとうございます。 > 質問文にはられたコードにはあるように見えたのであれっと思って回答控えていましたが、「実際には書いてなかった」パターンでしょうか。 横槍の横槍になってしまいますが、 本ページのtwitter_autoFavorite.pyは私の回答以降に追記されたもので、 元々twitter_autoFavorite.pyにはmain関数は存在しなかったと思います。 間違っていればごめんなさい。 バックグラウンド実行可能だったんですね。 勉強になります。
hesitate.sheep

2019/05/09 08:10

お二方ありがとうございます。 main()に関しては@yayakonaさんの言う通り後から追加したもので最初はmain()を書いておりませんでした。 色々なサイトを見て回ってくっつけたり削除したりしていたので変な矛盾が発生してしまっていたようですね。おかげさまでなぜmain()が必要なのか理解できました。 定期処理でのバックグラウンド実行やターミナルを複数開くなどの助言とても助かります。 これで次のステップに進むことができそうです。大変お世話になりました。また機会ありましたらよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問