コード例 #1
0
ファイル: scrap.py プロジェクト: ZipKortnicks48/instascrapper
class scrapper():
    def __init__(self,username):
        self.bdAPI=bdAPI()#экземпяр БД класса
        self.user_id=self.bdAPI.getUserIdFromName(username)
        self.f=Finder(self.user_id) #экземпяр инстаграм класса
    #добавление всех записей
    def asyncLoadAllMediaInfo(self,username):
        max_id=-1
        errors=0
        while max_id!=-2:
            feed,max_id = self.f.findFeed(max_id)
            #сохранение записей из feed
            for item in feed:
                try: 
                    self.bdAPI.addMediaItem(item)    
                except:
                    errors+=1
                    continue
    #загрузка комментариев
    def loadComments(self):#все комментарии здесь попадают в базу  
        rows=self.bdAPI.getMediaIds()
        for row in rows:
            max_id=-1
            errors=0
            try:
                comments=self.f.takeCommentsWithoutCircle(row[0],20)
                for item in comments:
                    try: 
                        self.bdAPI.addComment(item,row[0])    
                    except:
                        errors+=1
                        continue
            except Exception as e:
                self.writeReport(str(e))
                QMessageBox.about(self,"Ошибка получения комментариев",str(e))
    #поиск комментариев их запись и выдача подходящих
    def findAbcAllCommentsAndSendIt(self):
        self.bdAPI.commentsUnNew()#комментарии прочитаны
        rows=self.bdAPI.getMediaIds()
        for row in rows:
            commentsOld=self.bdAPI.takeOldCommentsIds(row[0])#старые 50
            commentsOldN=list(map(lambda x: int(x[0]),commentsOld))
            commentsNew=self.f.takeCommentsWithoutCircle(row[0],50)#новые 50
            for comment in commentsNew:
                if comment['pk'] in commentsOldN:
                    break
                else:
                    self.bdAPI.addComment(comment,row[0])#добавляем в базу новые комментарии
        self.bdAPI.checkNewComments()#отмечает все новые комменты по словарю
        rows=self.bdAPI.showGoodNewComments()#получает новые и отмеченные для единовременного их вывода на экран
        self.bdAPI.commentsUnNew()#комментарии прочитаны
    #перезагрузка базы
    def LoadAll(self,name):
        self.asyncLoadAllMediaInfo(name)  
        self.loadComments()
        self.bdAPI.checkComments()
    def writeReport(self,text):
        now=datetime.now()
        with open('report.info' , 'a') as file:
            file.write('\n%s\t%s'%(now.strftime("%d-%m-%Y %H:%M"),text)) #дозапись в файл
    #проверка на наличие новой записи стены
    def searchAndAddNewMediaItems(self):
        oldMediaIds=self.bdAPI.getMediaIds()
        newMediaIds=self.f.findNewFeed()
        oldMediaIds=list(map(lambda x: int(x[0]),oldMediaIds))
        for media in newMediaIds:
            if media['pk'] in oldMediaIds:
                break
            else:
                self.bdAPI.addMediaItem(media)