Найти - Пользователи
Полная версия: "Файловая БД" не записывает в файл
Начало » Python для новичков » "Файловая БД" не записывает в файл
1 2
enjoy44
 import urllib
import hashlib
import sys
import os
import http.cookiejar as cookielib
import re ,base64, requests,json
class FoobarDB(object):
    location = ''
    pwd = '***********'
    username = '*********'
    session = ''
    qual_v = '3'
    json_base = ''
    def __init__(self , location):
        self.location = location 
        try: self.f = open(location,'r')
        except: self.f = open(location,'w')
        self.f.close()
        
    [b]def set_db(self,key,value):[/b]
        with open(self.location,'r') as self.file:
            self.data = self.file.read()
            self.file.close()
            if (self.data != ''):
                self.jsonData = json.loads(self.data)
                self.jsonData.update({key:value})
                self.jsonData = json.dumps(self.jsonData)
            else:
                self.jsonData = {key:value}
                self.jsonData = json.dumps(self.jsonData)
            self.__burn__db(self.jsonData)
    
    def __burn__db(self,data):
        with open(self.location,'w') as self.file:
            result = self.file.write(data)
            print (result)
            self.file.flush()
 
    def getSetting(self,param):
        qual_v = self.qual_v
        pwd = self.pwd
        username = self.username
        session = self.session
        if (param == 'pwd'):
            return pwd
        if (param == 'username'):
            return username 
        if (param == 'session'):
            return session
        if (param == 'qual_v'): 
            return qual_v
    def setSetting(self,param,value):
        pwd = self.pwd
        username = self.username
        session = self.session
        if (param == 'pwd'):
            pwd = value
        if (param == 'username'):
            username = value
        if (param == 'session'): 
            session = value
    def GET(self,url, mCmd, mParams):
        url="https://api.megogo.net/v1/"+url
        remc=mCmd
        remp=mParams
        session=self.getSetting('session')
        if mParams==[]: mParams={}
        req_p1 = []
        req_p2 = []
        if mParams:
            if len(mParams):
                for mKey in mParams:
                    req_p1.append('%s=%s' % (mKey, urllib.parse.quote_plus(str(mParams[mKey]))))
                    req_p2.append('%s=%s' % (mKey, mParams[mKey]))
        req_params = '&'.join(req_p1)
        req_hash = ''.join(req_p2)
        res = ('%s%s'%(req_hash,'63ee38849d')).encode('utf-8')
        m = hashlib.md5()
        m.update(res)
        target =( '%s/%s?%s&sign=%s' % (url, mCmd, req_params, '%s%s' % (m.hexdigest(), '_kodi_j1')))#.replace('//','/')
        print (target)
        try: cookie = json.loads(base64.b64decode(get_db("login")))
        except: cookie=None
        if cookie=={}: cookie=None
        try:http=get_db(target)
        except: http=""
        #print "saved cook as %s"%cookie
        cookies = None
        if len(http)<6:
            try:
                print (requests.get(target, cookies = cookie, headers = {'User-Agent':'UA'}))
                request = requests.get(target, cookies = cookie, headers = {'User-Agent':'UA'})
                http = request.text
                cookies = requests.utils.dict_from_cookiejar(request.cookies)
                print (cookies)
                http=http.encode('utf-8')
                [b]self.set_db('target',http)[/b]
                if not cookie and cookies:
                   [b] self.set_db("login",base64.b64encode(str(cookies).replace("'", '"')))[/b]
            except: 
                print ("Error GET")
                cookies = None
                return None
		
    def login(self):
        data = self.GET('auth', 'login', {'login': self.getSetting('username'), 'password': self.getSetting('pwd'), 'remember':"1"})
        if data:
            if data['result'] == 'ok':
                #print data['data']['tokens']['remember_me_token']
                #fav= data['user']['favorites']
                #session = data['session']
                session=data['data']['tokens']['remember_me_token']
                self.setSetting('session',session)
            else:
                self.setSetting('session','')
	
    def tvshow(self):
        print ("TV")
        http=GET('','tv',{'limit':'100'})
        ids=[]
        if http:
            for pak in http['data']['packages']:
                print (pak['title'])
                for ch in pak['channels']:
                    print (ch)
                    if ch['is_available']==True and ch['id'] not in ids: 
                        ids.append(ch['id'])
                        urip = {'func':'play', 'video_id': ch['id']}
                        uri = '%s?%s' % (sys.argv[0], urllib.parse.urlencode(urip))
                        print ('Ссылка: ' + str(uri))
    #                i.setInfo(type = 'Video', infoLabels = {'title':ch['title']})
    #                i.setProperty('IsPlayable', 'true')
    #                xbmcplugin.addDirectoryItem(hos, uri, i, False)
                        print ("%s:%s"%(ch['title'].encode('utf-8'),ch['is_available']))
    #xbmcplugin.endOfDirectory(hos)
    def play(self,params):
        print (params)
        qu = self.getSetting('qual_v')
        bitrate=['240','320','360','480','576','720','1080']
        #if (qu>0): params['bitrate']=bitrate[int(qu)-1]
        data = GET('','stream', params)
        print (data)
        path = data['data']['src']
mydb = FoobarDB("mydb.db")
#mydb.set_db('testoviy_key','testoviy_value')
mydb.login()
#play({'video_id': '3946161','bitrate':'240'})
PEHDOM
enjoy44 М-м-м-да, и ктоже вас научил подавлять все ошибки? за такие конструкции
 try:
            ....
 except :
          print ("Error GET")
нужно бить по пальцам, топором.
если бы вы убрали тру-екскпт, или хотябы сделали вывод ошибки , то сразу бы увидели чтото типа такого:
TypeError: b'{"result":"error","message":"\xd0\x92\xd0\xb2\xd0\xb5\xd0\xb4\xd0\xb5\xd0\xbd\xd0\xbd\xd1\x8b\xd0\xb9 \xd0\xbb\xd0\xbe\xd0\xb3\xd0\xb8\xd0\xbd \xd0\xb8\xd0\xbb\xd0\xb8 \xd0\xbf\xd0\xb0\xd1\x80\xd0\xbe\xd0\xbb\xd1\x8c \xd0\xbd\xd0\xb5\xd0\xbf\xd1\x80\xd0\xb0\xd0\xb2\xd0\xb8\xd0\xbb\xd1\x8c\xd0\xbd\xd1\x8b\xd0\xb5","errors":{"login":"\xd0\x92\xd0\xb2\xd0\xb5\xd0\xb4\xd0\xb5\xd0\xbd\xd0\xbd\xd1\x8b\xd0\xb9 \xd0\xbb\xd0\xbe\xd0\xb3\xd0\xb8\xd0\xbd \xd0\xb8\xd0\xbb\xd0\xb8 \xd0\xbf\xd0\xb0\xd1\x80\xd0\xbe\xd0\xbb\xd1\x8c \xd0\xbd\xd0\xb5\xd0\xbf\xd1\x80\xd0\xb0\xd0\xb2\xd0\xb8\xd0\xbb\xd1\x8c\xd0\xbd\xd1\x8b\xd0\xb5"}}' is not JSON serializable
и ругаеться оно на
 File "D:\PL\test\test004.py", line 30, in set_db
    self.jsonData = json.dumps(self.jsonData)
тоесть оно банально не может распарсить json,“ патамушта” вы передаете байты, а должны передать строку.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB