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

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

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

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

Python

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

Q&A

1回答

497閲覧

PythonTwitterでの構文エラー

mer

総合スコア12

Twitter

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

Python

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

0グッド

0クリップ

投稿2019/07/02 07:57

編集2019/07/02 13:45

PythonでTwitterの自身のホームTLを取得しその中から指定ワードでいいねするコードを作成していますが、構文エラーがでます。

エラーコード

Traceback (most recent call last):
File "/data/data/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 31, in <module> start(fakepyfile,mainpyfile) File "/data/data/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 30, in start exec(open(mainpyfile).read(), main.dict) File "<string>", line 23 for result in search_results: ^ SyntaxError: invalid syntax [Program finished]

質問内容はPythonでTwitter自身のホームTLを取得しその中から指定ワードでいいねする方法です。
そもそもこちらのコード自体が正しく動作するかどうかも疑問でエラー以前の問題だと私は思っていたのですが、回答者様によりますとあくまでもエラーだけが原因らしいので、解決法を提示していただけたらと思います。

他にPythonの正しいTwitterの使い方をご存知の方は正しいコードの回答をいただければ幸いです。

from requests_oauthlib import OAuth1Session CK = '' CS = '' AT = '' AS = '' # OAuth1Sessionによる認証 twitter = OAuth1Session(CK, CS, AT, AS) # パラメータ params = { 'count': 5, # 取得するタイムライン数 } response = twitter.get('https://api.twitter.com/1.1/statuses/home_timeline.json', params=params) search_results = api.search(q="指定するキーワード", count=10) try:api.create_favorite(tweet_id) for result in search_results: tweet_id = result.id #Tweetのidを取得 user_id = result.user._json['id'] tweet in response.json(): print('-'*30) print(tweet['user']['name'], '@'+ tweet['user']['screen_name']) # ユーザー名 print(tweet['created_at']) # 投稿日時 print(tweet['text'])# 本文

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

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

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

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

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

quickquip

2019/07/02 08:26

上のコードの方はtweepyでしょうか? 下のコードが今書きかけのコードで、こちらはtweepyを使わずにrequests-oauthlibを使って自前でアクセスしているということで合ってますか?
tetsunosuke

2019/07/02 08:27

try: api.create_favorite(tweet_id) #いいねする この api の前のスペースが多い気がしますが、これは意図がありますか? それが原因のような気がします。 発生している構文エラーを質問に貼り付けてください。
mer

2019/07/02 12:26

はい。上のコードはtweepyで使用しいいね出来ていたものになります。 下のコードはhttp://www.spemi.org/article/twitter/ こちらのサイトにあるコードなのですが、上のコードと一緒に使用するということは不可能なのでしょうか? Pythonでならどの方法でも構わないのですが、ホームタイムラインからいいねをする方法はないものでしょうか…?
mer

2019/07/02 12:30

上のコードはTLなしで自動いいねができていたコードになります。 空白部分を直したり色々試してみましたが、現在のエラーは File "<string>", line 22 for result in search_results: になります。 line22は for result in search_results: になりますが、それまで使用できていた下のコードに上のコードを追記するとこのようなエラーになってしまうため、コードの使い方自体が間違っているのだと思うのですが、正しく使うためにはどうすれば良いでしょうか?
tetsunosuke

2019/07/02 12:41

動かしたコードそのものと、エラーを合わせて貼ってもらわないとはっきりしたことがいえません。 いろいろやるのは結構ですが、こちらで認識できない新しいエラーが起きてしまうかもしれないので。
y_waiwai

2019/07/02 12:56

その出たエラーというのをコピペで提示しましょう
mer

2019/07/02 13:01

>tetsunosuke 質問のコードを修正し直しましたので、これで正しく使用できるコードをお教えください。 エラー文は記述の通りです。
mer

2019/07/02 13:10

>y_waiwaiさん 上記のコードによるエラーコードはこちらになります。 File "<string>", line 22 for result in search_results: になります。 line22は for result in search_results:
tetsunosuke

2019/07/02 13:11

>これを付け加えたいのですが 付け加えたあと、動かしてエラーになった、コード、そしてその時のエラー内容をコピペして、そのまま提示お願いしたいです。 今のコードはtryのあたりがおかしいです。 CKとかの値はもちろん消していただいても構いません。 回答者はまず、まったく同じ現象を手元で確認し、 そして、修正内容を提案したいのです。
mer

2019/07/02 13:16

コード修正しエラーコードも提示もしましたが、他に何がたりませんか?
y_waiwai

2019/07/02 13:18

エラーメッセージの提示がないですが。。
mer

2019/07/02 13:19

File "<string>", line 23 for result in search_results: ^ SyntaxError: invalid syntax
mer

2019/07/02 13:20

エラーコードはこちらになります。 line22は for result in search_results: の部分になります。
y_waiwai

2019/07/02 13:22

だから、エラーメッセージ全文をコピペで提示しましょうよ。 なんでそんなに隠蔽したいんだか。。
tetsunosuke

2019/07/02 13:22

質問への追記・修正の依頼 をしているので、このコメント欄にあれこれ書くのではなく、質問そのものの編集をすることを要望しています。 https://teratail.com/help#about-template 質問のテンプレートを活用すると、コードと試したこと、エラーメッセージの貼り方がわかりやすく表現できるので、参考にしてもらえばと思います。 ※teratailは質問回答のサイトではありますが、ノウハウを蓄積するサイトでもあります。
mer

2019/07/02 13:26

>y_waiwai 全て記述し再度質問の修正も行いました。 これで正しいコードの動かし方分かるようになりましたか?
mer

2019/07/02 13:27

>tetsunosukeさん 詳しくありがとうございます。 質問の修正は前に終わらせていますが、他に足りないところがあるということでしょうか?
mer

2019/07/02 13:35

隠蔽したがる。の意味が分かりかねますが、エラーコードをすべて提示しても結局何も分かりませんでした。ってことはありませんよね?
tetsunosuke

2019/07/02 13:45

なるほど。最新版がこれではっきりわかりました。 となると、 >try:api.create_favorite(tweet_id) これが怪しいです。(いま手元に検証環境がありませんので、明確には言えませんが) syntaxエラーの場合は、「提示されている行より前に問題がある」可能性がありますので。 try:  api.〜 ではないですか?
mer

2019/07/03 00:23

もちろんその部分も直しました。 ですが今度は違うエラーがでます。 いろいろ試すのは結構とのことでしたが、 やはりこれエラーどうこう以前に"いいねする"というコード自体が間違っているだけだと思うのですが…。
y_waiwai

2019/07/03 00:29 編集

直したならその直したコードを提示しようよ。 真面目にこの問題を解決する気はあるんでしょうか
mer

2019/07/03 00:28

>y_waiwai こちらがエラー以前の問題だと質問にも指摘していたにも関わらず、それでもなおエラー文にだけこだわり続けなぜか隠蔽したがると謎の深読みまでしエラー文をすべて記述しろと大見得を切ったのに結局なんにも分かりませんでしたか? プログラマーの方ならエラー以前にコードの問題だと気付くと踏んでいましたが残念です。 あそこまでエラー文にこだわり続けていたのですからちゃんとエラーに関する解決法を教えていただきたいですね。
y_waiwai

2019/07/03 00:30

間違ったコードを提示されて、これで解決しろと言われてもムリということは理解できませんかw まあ、あなたが解決する気がないようなので、私はこの件からは降りるようにしますねw
quickquip

2019/07/03 01:16 編集

質問のタイトルが「構文エラー」なので回答者側は当然 質問者は構文エラーが起きて困っている状況だからそれを直したい という意図の質問だと思うわけです。 だから「エラーを見せろ」「エラーが出るコードを見せろ」って書くし、いっこうにそれらが出てこなければ「なんで隠すんだ」って思うわけ。至極当然ですね。 ところが実はこの質問の意図は「構文エラーが起きることを直したい」のではなくて 自分がやりたいコードをどう書くのか自分で調べるのが面倒だから誰か教えてください なわけです。 質問のタイトルと、情報の提示の仕方と、質問の意図がバラバラなので回答者側が混乱しているんです。
quickquip

2019/07/03 01:02

> こちらのコード自体が正しく動作するかどうかも疑問でエラー以前の問題だと私は思っていたのですが これでタイトルを「構文エラー」にしたのが間違いでしょう。 > 回答者様によりますとあくまでもエラーだけが原因らしいので はちょっと意味が取れないですね。
tetsunosuke

2019/07/03 01:27

初心者ということで多少大目にはみてあげようよと思いながら... > やはりこれエラーどうこう以前に"いいねする"というコード自体が間違っているだけだと思うのですが…。 そうですね。 回答されている方が > でも、そもそもapiを定義してないのか。だとしたら動かないなこれ。 のように書いているので、そもそも一番最初に、 > 上のコードの方はtweepyでしょうか? > 下のコードが今書きかけのコードで、こちらはtweepyを使わずにrequests-oauthlibを使って自前でアクセスしているということで合ってますか? というところもちゃんと取り入れてほしいと思います。 個人的な考えでは、tweepyで作り直すのが良いと思います。 こちらの記事はすでにご覧になっている気もしますが、 https://qiita.com/gurensouen/items/484e3198bcafa69f5c8b かなり参考になると思います。
guest

回答1

0

とりあえず、try文には、最低でも続けてexcept節が必要になります。

python

1try: 2 例外が起きるかもしれない処理 3except: 4 例外が起きたときの処理

except節がないことか直接の構文エラーの原因になります。実際にはもっといろいろな機能があるので、このあたりの構文についてご存知でなければ、よく調べてみてください。
(単一の文or式であればコロンの後ろに続けること自体は問題ではありません。あまりおすすめはしませんが。)

質問文のコードの意図までちゃんと汲み取れているわけではありませんが、直すとしたらこんな感じでしょうか。

python

1from requests_oauthlib import OAuth1Session 2 3CK = '' 4CS = '' 5AT = '' 6AS = '' 7 8# OAuth1Sessionによる認証 9twitter = OAuth1Session(CK, CS, AT, AS) 10 11# パラメータ 12params = { 13 'count': 5, # 取得するタイムライン数 14} 15 16response = twitter.get('https://api.twitter.com/1.1/statuses/home_timeline.json', params=params) 17 18search_results = api.search(q="指定するキーワード", count=10) 19 20for result in search_results: 21 tweet_id = result.id #Tweetのidを取得 22 user_id = result.user._json['id'] 23 tweet in response.json(): 24 print('-'*30) 25 print(tweet['user']['name'], '@'+ tweet['user']['screen_name']) # ユーザー名 26 print(tweet['created_at']) # 投稿日時 27 print(tweet['text'])# 本文 28 29 # tweet_idを参照するってことは、少なくともループの中に入れる必要はあるんだろうなと・・・ 30 try: 31 api.create_favorite(tweet_id) 32 except: 33 pass 34

でも、そもそもapiを定義してないのか。だとしたら動かないなこれ。
(全体の構文解析が行われてから実行が始まるので、SyntaxErrorは直るけど違うエラーが出る、という状態になることでしょう。)

投稿2019/07/02 13:53

編集2019/07/02 13:55
hayataka2049

総合スコア30933

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問