Advertisement
LA_

skype to telegram converter

LA_
Jan 16th, 2023 (edited)
647
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.03 KB | None | 0 0
  1. #!/usr/local/bin/python
  2. # coding: utf-8
  3. import json
  4. from datetime import datetime
  5. import re
  6. import os
  7.  
  8. f = open('messages.json')
  9. data = json.load(f)
  10. f.close()
  11.  
  12. print(data.get('userId'))
  13.  
  14. for c in data.get('conversations', []): # DEBUG: proceed with 2 dialogs only
  15.     folder_name = 'export_skype_%s' % c.get('displayName', '')
  16.     if c.get('displayName', '') in [u'Star-Land (Minecraft Server)', u'Мои записи (Skype)', u'Star-Land - Test Group']:
  17.         if not os.path.exists(folder_name):
  18.             os.makedirs(folder_name)
  19.  
  20.         f = open(folder_name + '/_chat.txt', 'w+')
  21.  
  22.         first_line = True
  23.  
  24.  
  25.         for m in reversed(c.get('MessageList', [])): # the order must be reversed to keep the dates
  26.             # format messages as
  27.             # [dd.mm.yyyy, HH:MM:SS] nick: message
  28.             # [dd.mm.yyyy, HH:MM:SS] nick: <прикреплено: ХХХХ-ХХХХ-ХХХХ.jpg>
  29.  
  30.  
  31.             # time
  32.             res_arrival_time_str = None
  33.             try:
  34.                 orig_arrival_time_str = m.get('originalarrivaltime')
  35.                 orig_arrival_time = datetime.strptime(orig_arrival_time_str[:19], '%Y-%m-%dT%H:%M:%S') # "2023-01-12T19:49:29.56Z"
  36.                 res_arrival_time_str = datetime.strftime(orig_arrival_time, '%d.%m.%Y, %H:%M:%S')
  37.             except:
  38.                 pass
  39.             # print(res_arrival_time_str)
  40.             # sender
  41.             res_sender = None
  42.             orig_sender = m.get('from')
  43.             if orig_sender == '8:live:llukyanov_2':
  44.                 res_sender = '+79001234567'
  45.             else:
  46.                 res_sender = '+79001234567' # if one user is used, then import into telegram Group is possible
  47.                 # res_sender = orig_sender
  48.             # print(res_sender)
  49.             # message text
  50.             # ignored message types: ThreadActivity/TopicUpdate, ThreadActivity/HistoryDisclosedUpdate, ThreadActivity/JoiningEnabledUpdate, ThreadActivity/PictureUpdate,
  51.             #                        EndToEndEncryption/EncryptedText, RichText/Media_Album, RichText/Media_GenericFile, RichText/Media_AudioMsg, Event/Call, Poll,
  52.             #                        Text (this one contains useless data like `Call Log for Call 4f729474-ea5f-4364-a9b7-97dffef84b02`)
  53.             res_text = None
  54.             if m.get('messagetype', '') == 'RichText/UriObject':
  55.                 regex = r"objects/(.*?)\""
  56.                 content = m.get('content', '')
  57.                 m = re.search(regex, content)
  58.                 if m:
  59.                     if os.path.isfile('media/'+ m.group(1) + '.1.jpg'): # only JPEG and PNG files are supported
  60.                         filename = m.group(1) + '.1.jpg'
  61.                     else:
  62.                         filename = m.group(1) + '.1.png'
  63.                     # move file
  64.                     if os.path.isfile('media/'+filename):
  65.                         res_text = u'<прикреплено: %s>' % filename
  66.                         os.rename('media/'+filename, folder_name+'/'+filename)
  67.             elif m.get('messagetype', '') == 'RichText':
  68.                 res_text = m.get('content')
  69.                 res_text = res_text.replace('<i raw_pre="_" raw_post="_">', '_') # not really supported
  70.                 res_text = res_text.replace('</i>', '_')
  71.                 res_text = res_text.replace('<b raw_pre="*" raw_post="*">', '*') # not really supported
  72.                 res_text = res_text.replace('</b>', '*')
  73.                 res_text = res_text.replace('&gt;', '>')
  74.                 res_text = res_text.replace('&lt;', '<')
  75.                 res_text = res_text.replace('&apos;', '\'')
  76.                 res_text = res_text.replace('&quot;', '"')
  77.                 res_text = res_text.replace('&amp;', '&')
  78.                 # res_text = res_text.replace('\n', '\\n')
  79.                 # res_text = res_text.replace('\r', '\\r')
  80.                 res_text = res_text.replace('<ss type=\"2757_heavyexclamationmarksymbol\">(exclamationmark)</ss>', u'❗️')
  81.                 res_text = res_text.replace('<ss type=\"trophy\">(trophy)</ss>', u'🏆')
  82.                 res_text = res_text.replace('<ss type=\"26a0_warningsign\">(warning)</ss>',u'⚠️')
  83.                 res_text = res_text.replace('<ss type=\"26a0_warningsign\">(26a0_warningsign)</ss>',u'⚠️')
  84.                 res_text = res_text.replace('<ss type=\"cry\">(cry)</ss>',u'😢')
  85.                 res_text = res_text.replace('<ss type=\"1f3b2_gamedie\">(1f3b2_gamedie)</ss>',u'🎲')
  86.                 res_text = res_text.replace('<ss type=\"2705_whiteheavycheckmark\">(checkmarkbutton)</ss>',u'✅')
  87.                 res_text = res_text.replace('<ss type=\"2714_heavycheckmark\">(checkmark)</ss>',u'✔︎')
  88.                 res_text = res_text.replace('<ss type=\"274c_crossmark\">(274c_crossmark)</ss>',u'❌')
  89.                 res_text = res_text.replace('<ss type=\"plane\">(plane)</ss>',u'✈️')
  90.                 res_text = res_text.replace('<ss type=\"2611_ballotboxwithcheck\">(checkbox)</ss>',u'☑️')
  91.                 res_text = res_text.replace('<ss type=\"smile\">(smile)</ss>',u'🙂')
  92.                 res_text = res_text.replace('<ss type=\"pumpkin\">(pumpkin)</ss>',u'🎃')
  93.                 res_text = res_text.replace('<ss type=\"1f4c9_chartwithdownwardstrend\">(negativegraph)</ss>', u'📉')
  94.                 res_text = res_text.replace('<ss type=\"1f9e7_redenvelope\">(redenvelope)</ss>',u'💌')
  95.                 res_text = res_text.replace('<ss type=\"1f531_tridentemblem\">(trident)</ss>',u'🔱')
  96.                 res_text = res_text.replace('<ss type=\"2620_skullandcrossbones\">(2620_skullandcrossbones)</ss>',u'☠️')
  97.                 res_text = res_text.replace('<ss type=\"2620_skullandcrossbones\">(skullandbones)</ss>',u'☠️')
  98.                 res_text = res_text.replace('<ss type=\"1f3b0_slotmachine\">(slotmachine)</ss>',u'🎰')
  99.                 res_text = res_text.replace('<ss type=\"1f3b2_gamedie\">(dice)</ss>',u'🎲')
  100.                 res_text = res_text.replace('<ss type=\"1f451_crown\">(crown)</ss>',u'👑')
  101.                 res_text = res_text.replace('<ss type=\"1f4b0_moneybag\">(moneybag)</ss>',u'💰')
  102.                 res_text = res_text.replace('<ss type=\"1f4bc_briefcase\">(briefcase)</ss>',u'💼')
  103.                 res_text = res_text.replace('<ss type=\"1f553_fouroclock\">(fouroclock)</ss>',u'🕓')
  104.                 res_text = res_text.replace('<ss type=\"cwl\">(cwl)</ss>', u'')
  105.                 res_text = res_text.replace('<ss type=\"heart\">(heart)</ss>', u'❤️')
  106.                 res_text = res_text.replace('<ss type=\"mangraduate\">(mangraduate)</ss>',u'👨‍🎓')
  107.                 res_text = res_text.replace('<ss type=\"manteacher\">(manteacher)</ss>',u'👨‍🏫')
  108.                 res_text = res_text.replace('<ss type=\"phone\">(phone)</ss>',u'☎️')
  109.                 res_text = res_text.replace('<ss type=\"speechbubble\">(speechbubble)</ss>',u'💬')
  110.                 res_text = res_text.replace('<ss type=\"surprised\">(surprised)</ss>',u'😮')
  111.                 res_text = res_text.replace('<ss type=\"yes\">(yes)</ss>',u'🆗')
  112.                 # remove other emojis
  113.                 regex_emoji = re.compile('<ss type=\\"\w+\\">\(\w+\)</ss>')
  114.                 res_text = re.sub(regex_emoji, '', res_text)
  115.                 # remove all other tags
  116.                 regex_cleanr = re.compile('<.*?>')
  117.                 res_text = re.sub(regex_cleanr, '', res_text)
  118.  
  119.  
  120.  
  121.             # print(res_text)
  122.  
  123.             if res_arrival_time_str and res_sender and res_text:
  124.                 res_line = '[%s] %s: %s' % (res_arrival_time_str, res_sender, res_text)
  125.                 if first_line:
  126.                     first_line_str = u'[%s] %s создал(-а) группу "%s"' % (res_arrival_time_str, res_sender, c.get('displayName', ''))
  127.                     f.write(first_line_str.encode('utf-8')+'\r\n')
  128.                     first_line = False
  129.  
  130.                 f.write(res_line.encode('utf-8')+'\r\n')
  131.                 # print(res_line)
  132.             else:
  133.                 # print(res_arrival_time_str, res_sender, res_text)
  134.                 pass
  135.  
  136.         f.close()
  137.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement