فهرست منبع

Start comments development, improve existing code readability

Cammy 7 سال پیش
والد
کامیت
dcde0c9934
8فایلهای تغییر یافته به همراه120 افزوده شده و 66 حذف شده
  1. 2 2
      cAuthCookie.py
  2. BIN
      cAuthCookie.pyc
  3. 49 0
      cComments.py
  4. BIN
      cComments.pyc
  5. 62 57
      cDownloader.py
  6. BIN
      cDownloader.pyc
  7. 7 7
      cMain.py
  8. BIN
      cMain.pyc

+ 2 - 2
cAuthCookie.py

@@ -1,6 +1,6 @@
-import json
 import codecs
 import datetime
+import json
 import os.path
 
 import cLogger
@@ -46,7 +46,7 @@ def login(username, password):
 
     device_id = None
     try:
-
+        
         settings_file = "credentials.json"
         if not os.path.isfile(settings_file):
             # settings file does not exist

BIN
cAuthCookie.pyc


+ 49 - 0
cComments.py

@@ -0,0 +1,49 @@
+import time
+import json
+import codecs
+from socket import timeout, error as SocketError
+from ssl import SSLError
+from urllib2 import URLError
+from httplib import HTTPException
+from instagram_private_api import ClientError
+
+import cLogger
+
+
+def get_live(api, broadcast, record, first_comment_created_at=0):
+		comments_collected = comments
+
+		before_count = len(comments_collected)
+		try:
+			comments_res = api.broadcast_comments(
+				broadcast['id'], last_comment_ts=first_comment_created_at)
+			comments = comments_res.get('comments', [])
+			first_comment_created_at = (
+				comments[0]['created_at_utc'] if comments else int(time.time() - 5))
+
+			after_count = len(comments_collected)
+			if after_count > before_count:
+				# save intermediately to avoid losing comments due to unexpected errors
+				broadcast = broadcast.copy()
+				broadcast.pop('segments', None)     # save space
+				broadcast['comments'] = comments_collected
+				with open((record + "_" + str(broadcast['id']) + "_" + str(int(t)) + '.json'), 'w') as outfile:
+					json.dump(broadcast, outfile, indent=2)
+			comments = comments_collected
+
+		except (SSLError, timeout, URLError, HTTPException, SocketError) as e:
+			cLogger.log("Error", "RED")
+			# Probably transient network error, ignore and continue
+			# self.logger.warning('Comment collection error: %s' % e)
+		except ClientError as e:
+			if e.code == 500:
+				cLogger.log("500" "RED")
+				# self.logger.warning('Comment collection ClientError: %d %s' % (e.code, e.error_response))
+			elif e.code == 400 and not e.msg:   # 400 error fail but no error message
+				cLogger.log("400 no msg" "RED")
+				# self.logger.warning('Comment collection ClientError: %d %s' % (e.code, e.error_response))
+			else:
+				raise e
+		finally:
+			time.sleep(4)
+		return first_comment_created_at

BIN
cComments.pyc


+ 62 - 57
cDownloader.py

@@ -1,83 +1,88 @@
-import json
+import argparse
 import codecs
 import datetime
-import os.path
-import logging
-import argparse
 import json
-import codecs
-from socket import timeout, error as SocketError
+import logging
+import os.path
+import threading
+
+from socket import error as SocketError
+from socket import timeout
 from ssl import SSLError
 from urllib2 import URLError
 
+import cLogger, cComments
+import sys, os, time
+
 from httplib import HTTPException
 from instagram_private_api_extensions import live
-import sys, os, time, json
-import cLogger
 
 class NoBroadcastException(Exception):
-    pass
+	pass
 
 def main(apiArg, recordArg):
 	global api
 	global record
+	global isRecording
+	isRecording = False
 	api = apiArg
 	record = recordArg
 	getUserInfo(record)
 
 def recordStream(broadcast):
-    try:
-        dl = live.Downloader(
-            mpd=broadcast['dash_playback_url'],
-            output_dir='{}_output_{}/'.format(record, broadcast['id']),
-            user_agent=api.user_agent)
-    except Exception as e:
-        cLogger.log('[E] Could not start recording broadcast: ' + str(e), "RED")
-        cLogger.seperator("GREEN")
-        exit()
+	try:
+		dl = live.Downloader(
+			mpd=broadcast['dash_playback_url'],
+			output_dir='{}_output_{}/'.format(record, broadcast['id']),
+			user_agent=api.user_agent)
+	except Exception as e:
+		cLogger.log('[E] Could not start recording broadcast: ' + str(e), "RED")
+		cLogger.seperator("GREEN")
+		exit()
 
-    try:
-        cLogger.log('[I] Starting broadcast recording.', "GREEN")
-        dl.run()
-    except KeyboardInterrupt:
-        cLogger.log('', "GREEN")
-        cLogger.log('[I] Aborting broadcast recording.', "GREEN")
-        if not dl.is_aborted:
-            dl.stop()
-    finally:
-        t = time.time()
-        cLogger.log('[I] Stitching downloaded files into video.', "GREEN")
-        dl.stitch(record + "_" + str(broadcast['id']) + "_" + str(int(t)) + '.mp4')
-        cLogger.log('[I] Successfully stitched downloaded files.', "GREEN")
-        cLogger.seperator("GREEN")
-        exit()
+	try:
+		cLogger.log('[I] Starting broadcast recording.', "GREEN")
+		dl.run()
+	except KeyboardInterrupt:
+		cLogger.log('', "GREEN")
+		cLogger.log('[I] Aborting broadcast recording.', "GREEN")
+		if not dl.is_aborted:
+			dl.stop()
+	finally:
+		isRecording = False
+		t = time.time()
+		cLogger.log('[I] Stitching downloaded files into video.', "GREEN")
+		dl.stitch(record + "_" + str(broadcast['id']) + "_" + str(int(t)) + '.mp4')
+		cLogger.log('[I] Successfully stitched downloaded files.', "GREEN")
+		cLogger.seperator("GREEN")
+		exit()
 
 
 def getUserInfo(record):
-    try:
-        user_res = api.username_info(record)
-        user_id = user_res['user']['pk']
-        getBroadcast(user_id)
-    except Exception as e:
-        cLogger.log('[E] Could not get user info: ' + str(e), "RED")
-        cLogger.seperator("GREEN")
-        exit()
+	try:
+		user_res = api.username_info(record)
+		user_id = user_res['user']['pk']
+		getBroadcast(user_id)
+	except Exception as e:
+		cLogger.log('[E] Could not get user info: ' + str(e), "RED")
+		cLogger.seperator("GREEN")
+		exit()
 
 
 def getBroadcast(user_id):
-    try:
-        cLogger.log('[I] Checking broadcast for "' + record + '".', "GREEN")
-        broadcast = api.user_broadcast(user_id)
-        if (broadcast is None):
-            raise NoBroadcastException('No broadcast available.')
-        else:
-        	recordStream(broadcast)
-    except NoBroadcastException as e:
-        cLogger.log('[W] ' + str(e), "YELLOW")
-        cLogger.seperator("GREEN")
-        exit()
-    except Exception as e:
-    	if (e.__name__ is not NoBroadcastException):
-	        cLogger.log('[E] Could not get broadcast info: ' + str(e), "RED")
-	        cLogger.seperator("GREEN")
-	        exit()
+	try:
+		cLogger.log('[I] Checking broadcast for "' + record + '".', "GREEN")
+		broadcast = api.user_broadcast(user_id)
+		if (broadcast is None):
+			raise NoBroadcastException('No broadcast available.')
+		else:
+			recordStream(broadcast)
+	except NoBroadcastException as e:
+		cLogger.log('[W] ' + str(e), "YELLOW")
+		cLogger.seperator("GREEN")
+		exit()
+	except Exception as e:
+		if (e.__name__ is not NoBroadcastException):
+			cLogger.log('[E] Could not get broadcast info: ' + str(e), "RED")
+			cLogger.seperator("GREEN")
+			exit()

BIN
cDownloader.pyc


+ 7 - 7
cMain.py

@@ -1,18 +1,18 @@
+import argparse
 import codecs
 import datetime
-import os.path
 import logging
-import argparse
-import codecs
+import os.path
 import sys, os, time, json
 
-import cAuthCookie, cLogger, cDownloader
+import cAuthCookie, cLogger, cDownloader, cComments
 
-from socket import timeout, error as SocketError
-from ssl import SSLError
-from urllib2 import URLError
 from httplib import HTTPException
 from instagram_private_api_extensions import live
+from socket import error as SocketError
+from socket import timeout
+from ssl import SSLError
+from urllib2 import URLError
 
 # "naxunaw" "pyinstalive" "credentials.json"
 

BIN
cMain.pyc