質問編集履歴

2

追記:実行して詰まったところ

2018/02/14 15:07

投稿

teratail1111
teratail1111

スコア7

test CHANGED
File without changes
test CHANGED
@@ -44,7 +44,7 @@
44
44
 
45
45
  ```
46
46
 
47
- xxxx
47
+ xxx
48
48
 
49
49
  ```
50
50
 
@@ -187,3 +187,23 @@
187
187
  ```
188
188
 
189
189
  スクレイピングでも、XMLでもどちらでも構いませんので取得の方法を教えていただけると嬉しいです。
190
+
191
+
192
+
193
+
194
+
195
+ ### 追記
196
+
197
+ 具体的に、ElementTreeを使いtagを取得することができましたが、
198
+
199
+ ```
200
+
201
+ elem = ElementTree.fromstring(body)
202
+
203
+ print elem.tag
204
+
205
+ ```
206
+
207
+ 上記のコードを実行すると、getplayerstatusという結果は帰ってきますが、
208
+
209
+ ```<ticket>71289224:lv311038136:0:139239522:59vh8328ee4f</ticket>```の部分を取得するコードの書き方がわかりません。

1

ニコ生のapi利用について

2018/02/14 15:07

投稿

teratail1111
teratail1111

スコア7

test CHANGED
File without changes
test CHANGED
@@ -60,4 +60,130 @@
60
60
 
61
61
 
62
62
 
63
+ ### ニコ生APIの叩き方について
64
+
65
+ ニコ生のapiはログインした状態でないとapiを叩くことができないので以下のコードでapiを叩くことができます。apiを叩くにはニコニコ生放送のアカウントが必要です。以下のコードを実行すると指定した番組idのgetplayerstatusのapi結果が帰ってきます。
66
+
67
+ ```
68
+
69
+ #!/usr/bin/python
70
+
71
+ #coding:utf-8
72
+
73
+
74
+
75
+ import sys, urllib2
76
+
77
+ import urllib
78
+
79
+ import os.path
80
+
81
+ import os
82
+
83
+ import re
84
+
85
+ import cookielib
86
+
87
+ import time
88
+
89
+ from bs4 import BeautifulSoup
90
+
91
+ import xml.etree.ElementTree as Xml
92
+
93
+ import requests
94
+
95
+ import httplib
96
+
97
+ import lxml.html
98
+
99
+ from xml.etree import ElementTree
100
+
101
+
102
+
103
+ mail = ""
104
+
105
+ password = ""
106
+
107
+
108
+
109
+ headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; ja; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)',
110
+
111
+ 'Accept': '*/*',
112
+
113
+ 'Accept-Language': 'ja,en-us;q=0.7,en;q=0.3',
114
+
115
+ 'Accept-Charset': 'UTF-8,*',
116
+
117
+ 'Connection': 'keep-alive',
118
+
119
+ 'Keep-Alive': '300',
120
+
121
+ 'Cookie': '; '}
122
+
123
+
124
+
125
+
126
+
127
+ #ログイン処理
128
+
129
+ post_dict ={'show_button_facebook':'1',
130
+
131
+ 'next_url':'',
132
+
133
+ 'mail':mail,
134
+
135
+ 'password':password
136
+
137
+ }
138
+
139
+
140
+
141
+ headers['Referer']='https://account.nicovideo.jp/'
142
+
143
+ headers['Content-type']='application/x-www-form-urlencoded';
144
+
145
+ conn = httplib.HTTPSConnection('account.nicovideo.jp')
146
+
147
+ conn.request('POST','/api/v1/login?show_button_twitter=1&site=niconico',urllib.urlencode(post_dict),headers)
148
+
149
+ rs = conn.getresponse()
150
+
151
+ mc = re.compile('(user_session=(?!deleted)[^;]*);?').search(rs.getheader('Set-Cookie'))
152
+
153
+ user_session = mc.group(1)
154
+
155
+ headers['Cookie'] = user_session
156
+
157
+ rs.read()
158
+
159
+ rs.close()
160
+
161
+ conn.close()
162
+
163
+
164
+
165
+
166
+
167
+ liveid = 'lv3{番組id}'
168
+
169
+
170
+
171
+ conn = httplib.HTTPConnection('live.nicovideo.jp', 80)
172
+
173
+ conn.request('GET', '/api/getplayerstatus/%s' % liveid, '', headers)
174
+
175
+ body = conn.getresponse().read()
176
+
177
+ rs.close()
178
+
179
+ conn.close()
180
+
181
+
182
+
183
+
184
+
185
+ print body
186
+
187
+ ```
188
+
63
189
  スクレイピングでも、XMLでもどちらでも構いませんので取得の方法を教えていただけると嬉しいです。