Created
June 5, 2016 10:44
-
-
Save xplorld/7800547e4d5c5ce5804fd0755fd89bfe to your computer and use it in GitHub Desktop.
Get comments on netease music songs.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
# forked from http://playbear.github.io/2015/09/30/net-music-comment/ | |
import requests | |
import json | |
import os | |
import base64 | |
from Crypto.Cipher import AES | |
from pprint import pprint | |
def aesEncrypt(text, secKey): | |
pad = 16 - len(text) % 16 | |
text = text + pad * chr(pad) | |
encryptor = AES.new(secKey, 2, '0102030405060708') | |
ciphertext = encryptor.encrypt(text) | |
ciphertext = base64.b64encode(ciphertext) | |
return ciphertext | |
def rsaEncrypt(text, pubKey, modulus): | |
text = text[::-1] | |
rs = int(text.encode('hex'), 16)**int(pubKey, 16) % int(modulus, 16) | |
return format(rs, 'x').zfill(256) | |
def createSecretKey(size): | |
return (''.join(map(lambda xx: (hex(ord(xx))[2:]), os.urandom(size))))[0:16] | |
# text = { | |
# 'username': '邮箱', | |
# 'password': '密码', | |
# 'rememberLogin': 'true' | |
# } | |
def GetSongCommentID(songID): | |
detailURL = "http://music.163.com/api/song/detail?id=" + str(songID) + "&ids=[" + str(songID) + "]" | |
req = requests.get(detailURL) | |
return req.json()["songs"][0]["commentThreadId"] | |
def GetSongComments(songID,offset = 0): | |
commentID = GetSongCommentID(songID) | |
# in the original one, `text` contains username and password. Actually not required | |
text = {} | |
modulus = '00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7' | |
nonce = '0CoJUm6Qyw8W8jud' | |
pubKey = '010001' | |
text = json.dumps(text) | |
secKey = createSecretKey(16) | |
encText = aesEncrypt(aesEncrypt(text, nonce), secKey) | |
encSecKey = rsaEncrypt(secKey, pubKey, modulus) | |
data = { | |
'params': encText, | |
'encSecKey': encSecKey | |
} | |
url = 'http://music.163.com/weapi/v1/resource/comments/' + commentID + '/?offset=' + str(offset) + '&csrf_token=' | |
headers = { | |
'Cookie': 'appver=1.5.0.75771;', | |
'Referer': 'http://music.163.com/' | |
} | |
req = requests.post(url, headers=headers, data=data) | |
comments = map(lambda d:d["content"],req.json()["comments"]) | |
return comments | |
for l in range(0,500,10): | |
comments = GetSongComments(26238376,l) | |
for x in comments: | |
print x.encode("utf-8") | |
print len(comments) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment