Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import requests
- import time
- import datetime
- import os
- import sys
- import os.path
- def file_exists():
- return os.path.exists('token.txt')
- def get_data_from_file():
- with open('token.txt', 'r') as f:
- lines = f.read().splitlines()
- userD = {
- 'first_name':lines[0],
- 'last_name':lines[1],
- 'uid':lines[2],
- 'photo':lines[3],
- 'token':lines[4]
- }
- f.close()
- return userD
- def get_token(user, password):
- req = requests.get('https://oauth.vk.com/token?grant_type=password&client_id=3140623&client_secret=VeWdmVclDCtn6ihuP1nt&username={}&password={}&v=5.40'.format(user, password)).json()
- if ('error' in req):
- print('got an error. msg: {}'.format(req['error_description']))
- quit()
- else:
- token = req['access_token']
- user = get_user_info(req['user_id'])
- userD = {
- 'first_name':user['first_name'],
- 'last_name':user['last_name'],
- 'uid':user['uid'],
- 'photo':user['photo'],
- 'token':token
- }
- f = open('token.txt', 'w')
- line = '{}\n{}\n{}\n{}\n{}'.format(userD['first_name'], userD['last_name'], userD['uid'], userD['photo'], userD['token'])
- f.write(line)
- f.close()
- return userD
- def get_dialogs(token):
- req = requests.get("https://api.vk.com/method/messages.getDialogs?count=200&access_token={}".format(token)).json()
- if ('error' in req):
- print('got an error. code: {}; msg: {}'.format(req['error']['error_code'], req['error']['error_msg']))
- quit()
- userList = []
- for i in range(1, len(req['response'])):
- if ('chat_id') in req['response'][i]:
- continue
- else:
- userList.append(req['response'][i]['uid'])
- return userList
- def get_peer_messages(uid, token):
- req = requests.get("https://api.vk.com/method/messages.getHistory?rev=1&count=200&access_token={}&user_id={}".format(token, uid)).json()
- if ('error' in req):
- print('got an error. code: {}; msg: {}'.format(req['error']['error_code'], req['error']['error_msg']))
- quit()
- msgList = []
- page = 0
- limit = 200
- offset = 0
- while (len(req['response']) > 1):
- ln = len(req['response'])
- for i in range(1, ln):
- msg = {
- 'from':req['response'][i]['uid'],
- 'date':req['response'][i]['date'],
- 'body':req['response'][i]['body'],
- 'out':req['response'][i]['out']
- }
- msgList.append(msg)
- #print(len(msgList))
- page += 1
- offset = page * limit
- time.sleep(0.35)
- req = requests.get("https://api.vk.com/method/messages.getHistory?rev=1&count=200&access_token={}&user_id={}&offset={}".format(token, uid, offset)).json()
- return msgList
- def get_user_info(uid):
- req = requests.get("https://api.vk.com/method/users.get?user_ids={}&fields=has_photo,photo_50".format(uid)).json()
- if ('error' in req):
- print('got an error. code: {}; msg: {}'.format(req['error']['error_code'], req['error']['error_msg']))
- quit()
- user = {
- 'first_name':req['response'][0]['first_name'],
- 'last_name':req['response'][0]['last_name'],
- 'uid':req['response'][0]['uid'],
- 'photo':req['response'][0]['photo_50']
- }
- return user
- def unix_to_date(time):
- return datetime.datetime.fromtimestamp(int(time)).strftime('%d-%m-%Y %H:%M:%S')
- def make_html(self, uid, msgs):
- first_name = self['first_name']
- last_name = self['last_name']
- my_uid = self['uid']
- my_photo = self['photo']
- user = get_user_info(uid)
- f = open(str(uid) + '.html', 'a')
- f.write('<!DOCTYPE html>\n')
- f.write('<html>\n')
- f.write('<meta charset="utf-8"/>\n')
- f.write('<link rel="shortcut icon" href="http://vk.com/images/fav_chat.ico"/>\n')
- f.write('<title>VK Messages: {} {}({})</title>\n'.format(first_name, last_name, my_uid))
- f.write('<style>\n')
- f.write('h4{font-family: inherit;font-weight: 500;line-height: 1.1;color: inherit;margin-top: 10px;margin-bottom: 10px;font-size: 18px;}\n')
- f.write('body{font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;font-size: 14px;line-height: 1.42857143;color: #333;background-color: #fff;margin:0;}\n')
- f.write('hr{height: 0;margin-top: 20px;margin-bottom: 20px;border: 0;border-top: 1px solid #eee;}\n')
- f.write('.messages{width:1170px;margin:0 auto;text-align:left;}\n')
- f.write('.msg_item {overflow:hidden;}\n')
- f.write('.msg_deleted{overflow:hidden;background-color: #bdc3c7;margin-top: 5px;}\n')
- f.write('.from,.msg_body,.att_head,.attacments,.attacment,.fwd{margin-left:60px;min-height: 1px;padding-right: 15px;padding-left: 15px;}\n')
- f.write('.msg_item{margin-top:5px;}\n')
- f.write('.upic{float:left}\n')
- f.write('.upic img{vertical-align:top;padding:5px;width: 50px;height: 50px;}\n')
- f.write('.round_upic .upic img{border-radius: 50%;}\n')
- f.write('a {color: #337ab7;text-decoration: none;}\n')
- f.write('a:active, a:hover {outline: 0;}\n')
- f.write('a:focus, a:hover {color: #23527c;text-decoration: underline;}\n')
- f.write('.att_head{color:#777;}\n')
- f.write(".att_ico{float:left;width:11px;height:11px;margin: 3px 3px 2px; background-image:url('http://vk.com/images/icons/mono_iconset.gif');}\n")
- f.write('.att_photo{background-position: 0 -30px;}\n')
- f.write('.att_audio{background-position: 0 -222px;}\n')
- f.write('.att_video{background-position: 0 -75px;}\n')
- f.write('.att_doc{background-position: 0 -280px;}\n')
- f.write('.att_wall,.att_fwd{background-position: 0 -194px;}\n')
- f.write('.att_gift{background-position: 0 -105px;}\n')
- f.write('.att_sticker{background-position: 0 -362px; width: 12px; height: 12px;}\n')
- f.write('.att_link{background-position: 0 -237px;}\n')
- f.write('.attb_link a span{color:#777777 !important;}\n')
- f.write('.att_geo{background-position: 0 -165px;}\n')
- f.write('.fwd{border:2px solid #C3D1E0;border-width: 0 0 0 2px;margin-left:85px;}\n')
- f.write('</style>\n')
- f.write('</head>\n')
- f.write('<body>\n')
- f.write('<div class="messages round_upic">\n')
- f.write('<h4>\n')
- f.write('Даты сообщений: с {} по {}'.format(unix_to_date(msgs[0]['date']), unix_to_date(msgs[len(msgs)-1]['date'])))
- f.write('<h4>\n')
- f.write('Всего сообщений: {}\n'.format(len(msgs)))
- f.write('<hr>\n')
- count = 1
- for msg in msgs:
- date = unix_to_date(msg['date'])
- sender = ''
- senderID = ''
- photo = ''
- if (msg['out'] == 1):
- sender = first_name + ' ' + last_name
- senderID = 'https://vk.com/id' + str(my_uid)
- photo = my_photo
- else:
- sender = user['first_name'] + ' ' + user['last_name']
- senderID = 'https://vk.com/id' + str(user['uid'])
- photo = user['photo']
- f.write('<div id="msg{}" class="msg_item">\n'.format(count))
- f.write('<div class="upic">\n')
- f.write('<img src="{}" alt="[photo_50]"> </div>\n'.format(photo))
- f.write('<div class="from">\n')
- f.write('<b>{}</b>\n'.format(sender))
- f.write('<a href="{}" target="_blank">@id{}</a>\n'.format(senderID, msg['from']))
- f.write('<a href="#msg{}">{}</a></div>\n'.format(count, date))
- f.write('<div class="msg_body">{}</div></div>\n'.format(msg['body']))
- count += 1
- f.write('<hr> </div> </body> </html>\n')
- f.close()
- data = {}
- dialogs = {}
- if (file_exists()):
- choice = input('old token found. use it? (y/n): ')
- if (choice == 'y'):
- data = get_data_from_file()
- elif (choice == 'n'):
- login = input('login: ')
- pswd = input('pass: ')
- print('logging in')
- data = get_token(login, pswd)
- dialogs = get_dialogs(data['token'])
- else:
- login = input('login: ')
- pswd = input('pass: ')
- print('logging in')
- data = get_token(login, pswd)
- dialogs = get_dialogs(data['token'])
- print('got {} dialogs'.format(len(dialogs)))
- for dialog in dialogs:
- msgs = get_peer_messages(dialog, data['token'])
- if (len(msgs) == 0):
- continue
- print('got {} messages for peer {}'.format(len(msgs), dialog))
- make_html(data, dialog, msgs)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement