def GetMovieDBData(url = "", cache_days = 14):
    from base64 import b64encode
    global base_url
    global poster_size
    global fanart_size
    if not base_url:
        log("fetching base_url and size (MovieDB config)")
        base_url = True
        base_url, poster_size, fanart_size = GetMovieDBConfig()
    filename = b64encode(url).replace("/","XXXX")
    path = Addon_Data_Path + "/" + filename + ".txt"
    log("trying to load "  + path)
    if xbmcvfs.exists(path) and ((time.time() - os.path.getmtime(path)) < (cache_days * 86400)):
        return read_from_file(path)
    else:
        url = "http://api.themoviedb.org/3/" + url + "api_key=%s" % moviedb_key
        log("Downloading MovieDB Data: " + url)
        headers = {"Accept": "application/json"}
        succeed = 0
        while succeed < 3:
            try:
                request = Request(url, headers = headers)
                response = urlopen(request).read()
                log(response)
                log("saved file " + filename)
                response = json.loads(response)
                save_to_file(response,filename,Addon_Data_Path)
                return response
            except:
                log("could not get data from %s" % url)
                xbmc.sleep(1000)
                succeed += 1
        return []
Example #2
0
def GetMovieDBData(url="", cache_days=14):
    from base64 import b64encode
    global base_url
    global poster_size
    global fanart_size
    if not base_url:
        log("fetching base_url and size (MovieDB config)")
        base_url = True
        base_url, poster_size, fanart_size = GetMovieDBConfig()
    filename = b64encode(url).replace("/", "XXXX")
    path = Addon_Data_Path + "/" + filename + ".txt"
    log("trying to load " + path)
    if xbmcvfs.exists(path) and ((time.time() - os.path.getmtime(path)) <
                                 (cache_days * 86400)):
        return read_from_file(path)
    else:
        url = "http://api.themoviedb.org/3/" + url + "api_key=%s" % moviedb_key
        log("Downloading MovieDB Data: " + url)
        headers = {"Accept": "application/json"}
        succeed = 0
        while succeed < 3:
            try:
                request = Request(url, headers=headers)
                response = urlopen(request).read()
                log("saved file " + filename)
                response = json.loads(response)
                save_to_file(response, filename, Addon_Data_Path)
                return response
            except:
                log("could not get data from %s" % url)
                xbmc.sleep(1000)
                succeed += 1
        return []
def GetMusicBrainzIdFromNet(artist, xbmc_artist_id=-1):
    import base64
    url = 'http://musicbrainz.org/ws/1/artist/?type=xml&name=%s' % urllib.quote_plus(
        artist)
    tries = 0
    trylimit = 5
    gotit = False
    filename = base64.urlsafe_b64encode(url)
    if xbmcvfs.exists(
            filename) and time.time() - os.path.getmtime(filename) < 86400:
        return read_from_file(filename)
    else:
        while tries < trylimit and not gotit:
            ret = GetStringFromUrl(url)
            if ret:
                if 'requests are exceeding the allowable rate limit' in ret:
                    log('MusicBrainz limits amount of request per time - we must wait'
                        )
                    xbmc.sleep(1000)
                    tries = tries + 1
                else:
                    gotit = True
        if not gotit:
            return -1
        curXML = xml.dom.minidom.parseString(ret)
        curXMLs = curXML.getElementsByTagName('metadata')
        if len(curXMLs) > 0:
            curXML = curXMLs[0]
        else:
            return None
        curXMLs = curXML.getElementsByTagName('artist-list')
        if len(curXMLs) > 0:
            curXML = curXMLs[0]
        else:
            return None
        curXMLs = curXML.getElementsByTagName('artist')
        if len(curXMLs) > 0:
            curXML = curXMLs[0]
        else:
            return None
    #  artistName = GetValue(curXML, 'name')
        artistMusicBrainzId = curXML.getAttribute('id')
        log('Found MusicBrainz ID')
        #    if xbmc_artist_id != -1:
        #        SetMusicBrainzID(xbmc_artist_id, artistMusicBrainzId)
        return artistMusicBrainzId
def GetMusicBrainzIdFromNet(artist, xbmc_artist_id = -1):
    import base64
    url = 'http://musicbrainz.org/ws/1/artist/?type=xml&name=%s' % urllib.quote_plus(artist)
    tries = 0
    trylimit = 5
    gotit = False
    filename = base64.urlsafe_b64encode(url)
    if xbmcvfs.exists(filename) and time.time() - os.path.getmtime(filename) < 86400:
        return read_from_file(filename)
    else:
        while tries < trylimit and not gotit:
            ret = GetStringFromUrl(url)
            if ret:
                if 'requests are exceeding the allowable rate limit' in ret:
                    log('MusicBrainz limits amount of request per time - we must wait')
                    xbmc.sleep(1000)
                    tries = tries + 1
                else:
                    gotit = True
        if not gotit:
            return -1
        log(ret)
        curXML = xml.dom.minidom.parseString(ret)
        curXMLs = curXML.getElementsByTagName('metadata')
        if len(curXMLs) > 0:
            curXML = curXMLs[0]
        else:
            return None
        curXMLs = curXML.getElementsByTagName('artist-list')
        if len(curXMLs) > 0:
            curXML = curXMLs[0]
        else:
            return None
        curXMLs = curXML.getElementsByTagName('artist')
        if len(curXMLs) > 0:
            curXML = curXMLs[0]
        else:
            return None
        artistName = GetValue(curXML, 'name') 
        artistMusicBrainzId = curXML.getAttribute('id')
        log('Found MusicBrainz ID')
        if xbmc_artist_id != -1:
            SetMusicBrainzID(xbmc_artist_id, artistMusicBrainzId)
        return artistMusicBrainzId