質問編集履歴
1
退会にともない削除、申し訳ありません。
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,237 +1 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
python初学者です。
|
6
|
-
|
7
|
-
YoutubeDataAPI を用いて、youtubeから検索条件(検索名、投稿期間)に基づいたデータを取得したいと考えております。
|
8
|
-
|
9
|
-
https://qiita.com/g-k/items/7c98efe21257afac70e9
|
10
|
-
|
11
|
-
上記のページを参考にしつつ手を加えました。
|
12
|
-
|
13
|
-
jupyter notebookで以下のようなコードを実行しました。
|
14
|
-
|
15
|
-
```ここに言語を入力
|
16
|
-
|
17
|
-
pip install google-api-python-client
|
18
|
-
|
19
|
-
```
|
20
|
-
|
21
|
-
```ここに言語を入力
|
22
|
-
|
23
|
-
import pandas as pd
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
from apiclient.discovery import build
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
YOUTUBE_API_KEY = 'API_key'
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
youtube = build('youtube', 'v3', developerKey=YOUTUBE_API_KEY)
|
36
|
-
|
37
|
-
threeyears_titlelist_df = pd.read_csv(省略).dropna(how='any')
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
def get_video_info(part,publishedAfter ,publishedBefore, q, order, type, num):
|
44
|
-
|
45
|
-
dic_list = []
|
46
|
-
|
47
|
-
search_response = youtube.search().list(part=part,publishedAfter=publishedAfter,publishedBefore=publishedBefore,q=q,order=order,type=type)
|
48
|
-
|
49
|
-
output = youtube.search().list(part=part,publishedAfter=publishedAfter,publishedBefore=publishedBefore,q=q,order=order,type=type).execute()
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
for i in range(num):
|
54
|
-
|
55
|
-
dic_list = dic_list + output['items']
|
56
|
-
|
57
|
-
search_response = youtube.search().list_next(search_response, output)
|
58
|
-
|
59
|
-
if search_response is not None:
|
60
|
-
|
61
|
-
output = search_response.execute()
|
62
|
-
|
63
|
-
df = pd.DataFrame(dic_list)
|
64
|
-
|
65
|
-
df1 = pd.DataFrame(list(df['id']))['videoId']
|
66
|
-
|
67
|
-
df2 = pd.DataFrame(list(df['snippet']))[['channelTitle','publishedAt','channelId','title','description']]
|
68
|
-
|
69
|
-
ddf = pd.concat([df1,df2], axis = 1)
|
70
|
-
|
71
|
-
return ddf
|
72
|
-
|
73
|
-
```
|
74
|
-
|
75
|
-
threeyears_titlelist_df には'launch_date'などの列に指定したい時刻(文字列でyyyy-mm-dd形式)が、また'title_name'には検索に使用したい文字列が入っています。こちらは確認済みです。
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
```ここに言語を入力
|
80
|
-
|
81
|
-
store_df = pd.DataFrame()
|
82
|
-
|
83
|
-
for t in range(0,10):
|
84
|
-
|
85
|
-
title_name = threeyears_titlelist_df['title_name'][t]
|
86
|
-
|
87
|
-
title_id = threeyears_titlelist_df['title_id'][t]
|
88
|
-
|
89
|
-
result_df = get_video_info(part='snippet',publishedAfter=str(threeyears_titlelist_df['start_date'][t])+'T00:00:00.000000Z',publishedBefore=str(threeyears_titlelist_df['launch_date'][t])+'T00:00:00.000000Z',q=threeyears_titlelist_df['title_name'][t], order='viewCount',type='video',num = 20)
|
90
|
-
|
91
|
-
result_df['titlename'] = threeyears_titlelist_df['title_name'][t]
|
92
|
-
|
93
|
-
store_df = pd.concat([store_df, result_df], axis=0)
|
94
|
-
|
95
|
-
store_df
|
96
|
-
|
97
|
-
```
|
98
|
-
|
99
|
-
### 発生している問題・エラーメッセージ
|
100
|
-
|
101
|
-
上記のコードを打つと
|
102
|
-
|
103
|
-
```
|
104
|
-
|
105
|
-
---------------------------------------------------------------------------
|
106
|
-
|
107
|
-
KeyError Traceback (most recent call last)
|
108
|
-
|
109
|
-
~\anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
|
110
|
-
|
111
|
-
2645 try:
|
112
|
-
|
113
|
-
-> 2646 return self._engine.get_loc(key)
|
114
|
-
|
115
|
-
2647 except KeyError:
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
KeyError: 'id'
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
During handling of the above exception, another exception occurred:
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
KeyError Traceback (most recent call last)
|
144
|
-
|
145
|
-
<ipython-input-57-9ae29b025e51> in <module>
|
146
|
-
|
147
|
-
3 title_name = threeyears_titlelist_df['title_name'][t]
|
148
|
-
|
149
|
-
4 title_id = threeyears_titlelist_df['title_id'][t]
|
150
|
-
|
151
|
-
----> 5 result_df = get_video_info(part='snippet',publishedAfter=str(threeyears_titlelist_df['start_date'][t])+'T00:00:00.000000Z',publishedBefore=str(threeyears_titlelist_df['launch_date'][t])+'T00:00:00.000000Z',q=threeyears_titlelist_df['title_name'][t], order='viewCount',type='video',num = 20)
|
152
|
-
|
153
|
-
6 result_df['titlename'] = threeyears_titlelist_df['title_name'][t]
|
154
|
-
|
155
|
-
7 store_df = pd.concat([store_df, result_df], axis=0)
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
<ipython-input-55-6dba41c726ae> in get_video_info(part, publishedAfter, publishedBefore, q, order, type, num)
|
160
|
-
|
161
|
-
23 output = search_response.execute()
|
162
|
-
|
163
|
-
24 df = pd.DataFrame(dic_list)
|
164
|
-
|
165
|
-
---> 25 df1 = pd.DataFrame(list(df['id']))['videoId']
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
27 df2 = pd.DataFrame(list(df['snippet']))[['channelTitle','publishedAt','channelId','title','description']]
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
~\anaconda3\lib\site-packages\pandas\core\frame.py in __getitem__(self, key)
|
174
|
-
|
175
|
-
2798 if self.columns.nlevels > 1:
|
176
|
-
|
177
|
-
2799 return self._getitem_multilevel(key)
|
178
|
-
|
179
|
-
-> 2800 indexer = self.columns.get_loc(key)
|
180
|
-
|
181
|
-
2801 if is_integer(indexer):
|
182
|
-
|
183
|
-
2802 indexer = [indexer]
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
~\anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
|
188
|
-
|
189
|
-
2646 return self._engine.get_loc(key)
|
190
|
-
|
191
|
-
2647 except KeyError:
|
192
|
-
|
193
|
-
-> 2648 return self._engine.get_loc(self._maybe_cast_indexer(key))
|
194
|
-
|
195
|
-
2649 indexer = self.get_indexer([key], method=method, tolerance=tolerance)
|
196
|
-
|
197
|
-
2650 if indexer.ndim > 1 or indexer.size > 1:
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
KeyError: 'id
|
218
|
-
|
219
|
-
```
|
220
|
-
|
221
|
-
というようなエラーが出て、まったく意味が分かりません。検索条件をいろいろ変えましたが、for文のtの値を様々な値に変更してもこのようなエラーで実行できません。もし上記のソースコードに誤りがあることがわかる方がいたら、ご教示いただきたいです。
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
### 補足情報(FW/ツールのバージョンなど)
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
ちなみに投稿期間を検索条件から外したコードの際にはうまくいっていたので、そこが問題の可能性が高いと思います。
|
230
|
-
|
231
|
-
各変数の名前等は間違っていないことは確認済みです。
|
232
|
-
|
233
|
-
publishedAfter=str(threeyears_titlelist_df['start_date'][t])+'T00:00:00.000000Z の結果が使いたい日時の文字列になっていることも確認済みですが、もしかしたらそこの形式の認識が甘いのかもしれません。調べたのですがよくわかりませんでした。
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
python3.81 youtube data api v3 です。
|
1
|
+
退会にともない削除します。。本当に申し訳ありません。急な自己都合が原因です。
|