質問するログイン新規登録

質問編集履歴

4

日付をわかりやすいように表示

2020/11/16 02:22

投稿

XTJP
XTJP

スコア11

title CHANGED
File without changes
body CHANGED
@@ -1,3 +1,4 @@
1
+ # 当初の質問
1
2
  ### 前提・実現したいこと
2
3
  書籍名から出版社名を得て、Googleスプレッドシートにまとめたいです。Colabで作業していますが、一旦csvにダウンロードして手動でスプレッドシートに貼り付けるのでも構いません。
3
4
 
@@ -22,7 +23,7 @@
22
23
 
23
24
  楽天ブックスのAPIもためしましたが、ISBNを使用する場合の方法だけがネット検索で見つかったので難儀しています。
24
25
 
25
- ## 2020/11/16追記
26
+ # 2020/11/16追記
26
27
  教えていただいた内容を反映してシートに転記するコードを書いたのですがまだうまく動きません。アドバイスを頂けると幸いです。
27
28
  ### 変更点
28
29
  - cellの内容のみを取得

3

いただいたご指摘を反映しながらsheetに転記するコードを追記

2020/11/16 02:22

投稿

XTJP
XTJP

スコア11

title CHANGED
File without changes
body CHANGED
@@ -14,15 +14,39 @@
14
14
  などです。これらを「夏目漱石」とか「人工知能」とかに変更するとヒットしました。
15
15
 
16
16
  ### 該当のソースコード
17
+ (文字数制限の都合上削除しました)
17
18
 
18
- ```Python 3.6.9
19
- from google.colab import auth
20
- from oauth2client.client import GoogleCredentials
21
- import gspread
19
+ ### 試したこと
20
+ [http://ailaby.com/ndl_search/](http://ailaby.com/ndl_search/)
21
+ ほとんどこちらのサイトのコードそのままです。
22
22
 
23
- auth.authenticate_user()
24
- gc = gspread.authorize(GoogleCredentials.get_application_default())
23
+ 楽天ブックスのAPIもためしましたが、ISBNを使用する場合の方法だけがネット検索で見つかったので難儀しています。
25
24
 
25
+ ## 2020/11/16追記
26
+ 教えていただいた内容を反映してシートに転記するコードを書いたのですがまだうまく動きません。アドバイスを頂けると幸いです。
27
+ ### 変更点
28
+ - cellの内容のみを取得
29
+ - sheetに反映 のコードを自作
30
+ - [このコードの作者さん](http://ailaby.com/ndl_search/)は1つの本に対して複数のデータを収集し、dfにまとめるものでしたが、私の場合は複数の本に対してそれぞれ1つのデータ(出版社名+あわよくば著者名など)を収集し、sheetにまとめたいので自分なりに編集しました。
31
+
32
+ ### 発生している問題・エラーメッセージ
33
+ ``` Python 3.6.9
34
+ ---------------------------------------------
35
+ Search results for cnt=1 mediatype=1 title=そこが知りたかった 中毒診療 from=19800101
36
+ ---------------------------------------------
37
+ ---------------------------------------------------------------------------
38
+ NameError Traceback (most recent call last)
39
+ <ipython-input-7-ed4b9090a8a1> in <module>()
40
+ 109
41
+ 110 #sheetに反映
42
+ --> 111 worksheet.update_cell(cell.row, cell.col +1, publisher.text)
43
+ 112 worksheet.update_cell(cell.row, cell.col +2, item.find('title').text)
44
+ 113 worksheet.update_cell(cell.row, cell.col +3, author.text)
45
+
46
+ NameError: name 'publisher' is not defined
47
+ ```
48
+ ### 該当のソースコード
49
+ ``` Python 3.6.9
26
50
  import numpy as np
27
51
  from pandas import DataFrame
28
52
  import xml.etree.ElementTree as ET
@@ -34,7 +58,7 @@
34
58
  workbook = gc.open_by_url(ss_url)
35
59
  worksheet = workbook.get_worksheet(1)
36
60
 
37
- cell_list = worksheet.range("A4:A5")
61
+ cell_list = worksheet.range("A4:A10")
38
62
  for cell in cell_list:
39
63
 
40
64
  # 検索条件
@@ -42,7 +66,7 @@
42
66
  params['title'] = cell.value
43
67
  params['mediatype'] = '1'
44
68
  params['from'] = '1980-01-01'
45
- params['cnt'] = '2'
69
+ params['cnt'] = '1'
46
70
  params['idx'] = '1'
47
71
 
48
72
  list_map = defaultdict(list)
@@ -54,7 +78,7 @@
54
78
  while True:
55
79
 
56
80
  # 検索リクエスト
57
- r = s.get('http://iss.ndl.go.jp/api/opensearch', params=str(params['title']))
81
+ r = s.get('http://iss.ndl.go.jp/api/opensearch', params=params)
58
82
 
59
83
  # XML パース
60
84
  root = ET.fromstring(r.text.encode('utf-8'))
@@ -130,33 +154,32 @@
130
154
  print (' ' + publisher.text)
131
155
  list_map['publisher'].append(publisher.text)
132
156
  else:
133
- list_map['publisher'].append('')
157
+ list_map['publisher'].append('不明')
134
158
 
159
+ #sheetに反映
160
+ worksheet.update_cell(cell.row, cell.col +1, publisher.text)
161
+ worksheet.update_cell(cell.row, cell.col +2, item.find('title').text)
162
+ worksheet.update_cell(cell.row, cell.col +3, author.text)
163
+
164
+
135
165
  cnt = int(params['cnt'])
136
166
  idx = int(params['idx'])
137
167
  if len(items) < cnt:
138
168
  break
139
169
 
170
+
171
+ # df = DataFrame({'title' : list_map['title'],
172
+ # 'ID' : list_map['ID'],
173
+ # 'author' : list_map['author'],
174
+ # 'pubDate' : list_map['pubDate'],
175
+ # 'issued' : list_map['issued'],
176
+ # 'seriesTitle' : list_map['seriesTitle'],
177
+ # 'publisher' : list_map['publisher']},
178
+ # columns = ['title', 'ID', 'author', 'pubDate', 'issued', 'seriesTitle', 'publisher'])
179
+ # df.to_csv("books.csv", encoding='utf-8')
140
- params['idx'] = str(idx + cnt)
180
+ # files.download('books.csv')
141
- total += cnt
142
181
 
143
- df = DataFrame({'title' : list_map['title'],
144
- 'ID' : list_map['ID'],
145
- 'author' : list_map['author'],
146
- 'pubDate' : list_map['pubDate'],
147
- 'issued' : list_map['issued'],
148
- 'seriesTitle' : list_map['seriesTitle'],
149
- 'publisher' : list_map['publisher']},
150
- columns = ['title', 'ID', 'author', 'pubDate', 'issued', 'seriesTitle', 'publisher'])
151
- df.to_csv("books.csv", encoding='utf-8')
152
- files.download('books.csv')
182
+ # df
153
183
 
154
- df
155
184
  #
156
- ```
185
+ ```
157
-
158
- ### 試したこと
159
- [http://ailaby.com/ndl_search/](http://ailaby.com/ndl_search/)
160
- ほとんどこちらのサイトのコードそのままです。
161
-
162
- 楽天ブックスのAPIもためしましたが、ISBNを使用する場合の方法だけがネット検索で見つかったので難儀しています。

2

gspreadでセルの情報まで引用していたのをセルの内容のみ引用するように変更→ params['title'] = cell.value

2020/11/16 02:21

投稿

XTJP
XTJP

スコア11

title CHANGED
File without changes
body CHANGED
@@ -39,7 +39,7 @@
39
39
 
40
40
  # 検索条件
41
41
  params = {}
42
- params['title'] = cell
42
+ params['title'] = cell.value
43
43
  params['mediatype'] = '1'
44
44
  params['from'] = '1980-01-01'
45
45
  params['cnt'] = '2'

1

URLをMarkdown記法に従って記載

2020/11/16 01:21

投稿

XTJP
XTJP

スコア11

title CHANGED
File without changes
body CHANGED
@@ -156,7 +156,7 @@
156
156
  ```
157
157
 
158
158
  ### 試したこと
159
- http://ailaby.com/ndl_search/
159
+ [http://ailaby.com/ndl_search/](http://ailaby.com/ndl_search/)
160
160
  ほとんどこちらのサイトのコードそのままです。
161
161
 
162
162
  楽天ブックスのAPIもためしましたが、ISBNを使用する場合の方法だけがネット検索で見つかったので難儀しています。