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

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

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

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Twitter

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

Python

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

2回答

20824閲覧

missing 1 required positional argumentのエラー

naochan1027

総合スコア2

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Twitter

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

Python

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2020/09/11 05:25

前提・実現したいこと

jupyterでTwitterの特定のツイートのリプライを取得するシステムを作っています。
実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

エラーメッセージ
TypeError: search_tweets() missing 1 required positional argument: 'range'

該当のソースコード

Jupiter

1import urllib 2from requests_oauthlib import OAuth1 3import requests 4import sys 5def main(): 6 7 # APIの秘密鍵 8 CK = '*****' 9 CKS = '*****' 10 AT = '*****' 11 ATS = '*****' 12 # ユーザー・ツイートID 13 user_id = '@*****' 14 tweet_id = '*****' # str型で指定 15 # 検索時のパラメーター 16 count = 100 # 一回あたりの検索数(最大100/デフォルトは15) 17 range = 100 # 検索回数の上限値(最大180/15分でリセット) 18 # ツイート検索・リプライの抽出 19 tweets = search_tweets(CK, CKS, AT, ATS, user_id, tweet_id, count, range) 20 # 抽出結果を表示 21 print(tweets[0:5]) 22def search_tweets(self, CK, CKS, AT, ATS, user_id, tweet_id, count, range): 23 # 文字列設定 24 user_id += ' exclude:retweets' # RTは除く 25 user_id = urllib.parse.quote_plus(user_id) 26 # リクエスト 27 url = "https://api.twitter.com/1.1/search/tweets.json?lang=ja&q="+user_id+"&count="+str(count) 28 auth = OAuth1(CK, CKS, AT, ATS) 29 response = requests.get(url, auth=auth) 30 data = response.json()['statuses'] 31 # 2回目以降のリクエスト 32 cnt = 0 33 reply_cnt = 0 34 tweets = [] 35 while True: 36 if len(data) == 0: 37 break 38 cnt += 1 39 if cnt > range: 40 break 41 for tweet in data: 42 if tweet['in_reply_to_status_id_str'] == tweet_id: # ツイートIDに一致するものを抽出 43 tweets.append(tweet['text']) # ツイート内容 44 reply_cnt += 1 45 maxid = int(tweet["id"]) - 1 46 url = "https://api.twitter.com/1.1/search/tweets.json?lang=ja&q="+user_id+"&count="+str(count)+"&max_id="+str(maxid) 47 response = requests.get(url, auth=auth) 48 try: 49 data = response.json()['statuses'] 50 except KeyError: # リクエスト回数が上限に達した場合のデータのエラー処理 51 print('上限まで検索しました') 52 break 53 print('検索回数 :', cnt) 54 print('リプライ数 :', reply_cnt) 55 return tweets 56if __name__ == '__main__': 57 main()

補足情報(FW/ツールのバージョンなど)

環境:python 3.7.3,Jupyter Notebook
この方のコードを参考にしました。
https://qiita.com/h_tashiro/items/ed119c237f5595c3d7b8
似たような質問がありましたがいまいち理解できず困っております。
どうぞよろしくお願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

def search_tweets(self, ...の部分のselfが余計です。
この上に一行
class XX:
のようなクラス定義の行がないとselfを使えません。
search_tweets関数をクラスの中に入れたいかどうかでselfの行く末は決めてください。

なお発生しているエラーは、ちょうど私も先日遭遇しました。
関数の定義部と使用部で引数の位置がずれていると出ます。
ちなみにpositional argumentは位置引数といい、柴田先生のPython入門に載っていました。
このエラーを出にくくする1つの手段としてキーワード引数というのもあるようです。

投稿2020/09/11 06:26

xozeit

総合スコア19

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

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

naochan1027

2020/09/13 07:56

回答ありがとうございます。おかげで実行することができました。大変助かりました。 また、本のご紹介までしていただき大変勉強になりました。そちらの本で勉強してみようと思います。 キーワード引数という言葉も知らなかったため、これから調べて活用していきたいです!本当にありがとうございました!
guest

0

python

1 tweets = search_tweets(CK, CKS, AT, ATS, user_id, tweet_id, count, range) 2 # 抽出結果を表示 3 print(tweets[0:5]) 4def search_tweets(self, CK, CKS, AT, ATS, user_id, tweet_id, count, range):

パッとみたところ、パラメータの数が違います。
そもそも、search_tweetsはクラスメソッドでは無いので、selfを取るのがおかしいようです。

投稿2020/09/11 05:58

t_obara

総合スコア5488

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

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

naochan1027

2020/09/13 07:58

回答ありがとうございます。クラスメソッドではないものに、selfを取れないという知識がなく大変悩んでおりました。おかげさまで実行することができました。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問