Brasd99 commited on
Commit
2f50f00
1 Parent(s): bb62443

initial commit

Browse files
Files changed (4) hide show
  1. app.py +44 -0
  2. common/helpers.py +28 -0
  3. common/tinderwrapper.py +59 -0
  4. config.json +5 -0
app.py ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import json
3
+ import shutil
4
+ from common.tinderwrapper import TinderWrapper
5
+ from common.helpers import create_folder, save_data
6
+
7
+ with open('config.json', 'r') as f:
8
+ config = json.load(f)
9
+
10
+ APP_NAME = config['APP_NAME']
11
+ APP_LOGO = config['APP_LOGO']
12
+ APP_DESCRIPTION = config['APP_DESCRIPTION']
13
+
14
+ def update_progress(percent, text):
15
+ progress_bar.progress(percent)
16
+ status_text.text(text)
17
+
18
+ st.set_page_config(page_title=APP_NAME)
19
+ st.title(APP_NAME)
20
+ st.image(APP_LOGO, use_column_width=True)
21
+ st.markdown(APP_DESCRIPTION)
22
+
23
+ access_token = st.text_input('Tinder Access Token', help='Токен доступа, полученный из запроса Tinder')
24
+
25
+ if st.button('Запуск'):
26
+ if not access_token:
27
+ st.error('Необходимо задать токен доступа')
28
+ progress_bar = st.progress(0)
29
+ status_text = st.empty()
30
+ wrapper = TinderWrapper(access_token)
31
+ dump_folder = 'dump'
32
+ create_folder(dump_folder)
33
+ dump = wrapper.create_dump(dump_folder)
34
+ save_data(dump)
35
+ shutil.make_archive('output.zip', 'zip', dump_folder)
36
+ with open('output.zip', 'rb') as f:
37
+ bytes_data = f.read()
38
+ st.download_button(
39
+ label='Download Zip File',
40
+ data=bytes_data,
41
+ file_name='output.zip',
42
+ mime='application/octet-stream'
43
+ )
44
+
common/helpers.py ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import requests
2
+ import shutil
3
+ import os
4
+
5
+ def download_photo(url, save_path):
6
+ response = requests.get(url)
7
+ with open(save_path, 'wb') as file:
8
+ file.write(response.content)
9
+
10
+ def save_data(dump, dump_folder):
11
+ for id, value in dump.items():
12
+ folder_path = os.path.join(dump_folder, f'{value["name"]}_{id}')
13
+ os.makedirs(folder_path)
14
+
15
+ for photo_url in value['photos']:
16
+ file_name = photo_url.split("/")[-1]
17
+ save_path = os.path.join(folder_path, file_name)
18
+ download_photo(photo_url, save_path)
19
+
20
+ with open(os.path.join(folder_path, 'chat.txt'), 'w') as file:
21
+ for message in value['messages']:
22
+ name = f'[{value["name"] if message["from"] == id else "Me"}]'
23
+ file.write(f'{name}: {message["message"]}' + '\n')
24
+
25
+ def create_folder(folder_name):
26
+ if os.path.exists(folder_name):
27
+ shutil.rmtree(folder_name)
28
+ os.makedirs(folder_name)
common/tinderwrapper.py ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import requests
2
+ import json
3
+
4
+ class TinderWrapper():
5
+ def __init__(self, token):
6
+ self.headers = {
7
+ 'Host': 'api.gotinder.com',
8
+ 'persistent-device-id': '2A1756C9304C47E39CC4EB52BA002E59',
9
+ 'User-Agent': 'Tinder/14.14.0 (iPhone; iOS 16.1; Scale/3.00)',
10
+ 'app-session-id': '59B3E862-6B7A-4CFA-8D15-179326473F70',
11
+ 'support-short-video': '1',
12
+ 'x-hubble-entity-id': 'd213d4fe-239a-4583-87df-8907c6de59ad',
13
+ 'app-session-time-elapsed': '2.14300799369812',
14
+ 'X-Auth-Token': token,
15
+ 'x-supported-image-formats': 'webp, jpeg',
16
+ 'platform': 'ios',
17
+ 'Connection': 'keep-alive',
18
+ 'user-session-time-elapsed': '2.141390085220337',
19
+ 'Accept-Language': 'ru',
20
+ 'tinder-version': '14.14.0',
21
+ 'Accept': 'application/json',
22
+ 'app-version': '5363',
23
+ 'user-session-id': 'D31F92A9-C94B-478F-A3FB-05531B18758F',
24
+ 'os-version': '160000100000',
25
+ 'Content-Type': 'application/json'
26
+ }
27
+ self.host = 'https://api.gotinder.com'
28
+
29
+ def get_updates(self, last_activity_date):
30
+ try:
31
+ url = self.host + '/updates'
32
+ r = requests.post(url, headers=self.headers, data=json.dumps({"last_activity_date": last_activity_date}))
33
+ return r.json()
34
+ except requests.exceptions.RequestException as e:
35
+ print(e)
36
+
37
+ def get_photos(self, person):
38
+ photos = person['photos']
39
+ photo_urls = []
40
+ for photo in photos:
41
+ photo_urls.append(photo['url'])
42
+ return photo_urls
43
+
44
+ def create_dump(self, last_activity_date='1997-03-25T22:49:41.151Z'):
45
+ updates = self.get_updates(last_activity_date)['matches']
46
+ output = {}
47
+ for update in updates:
48
+ person = update['person']
49
+ photos = self.get_photos(person)
50
+ person_id = person['_id']
51
+ name = person['name']
52
+ messages = update['messages']
53
+ output[person_id] = {
54
+ 'name': name,
55
+ 'messages': messages,
56
+ 'photos': photos
57
+ }
58
+
59
+ return output
config.json ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ {
2
+ "APP_NAME": "TinderMessagesDumper",
3
+ "APP_LOGO": "https://raw.githubusercontent.com/coqui-ai/TTS/main/images/coqui-log-green-TTS.png",
4
+ "APP_DESCRIPTION": "Утилита позволяет сформировать дамп сообщений и фотографий из переписок Tinder"
5
+ }