philippe_44 wrote: 
> And for my understanding, what is the difference with dlmixcloud.com? Is
> this a download only site which would explain while streaming from it
> often fails?
> 
> [edit]: forget the question, I looked online and at the code and I
> understand now. So *very* likely the stream fails b/c dlmixcloud is not
> made for streaming...

I don't think so, the streaming comes directly from Mixcloud dlmixcloud
has nothing to do with that,
The only thing it does (as far as I understand it) is decoding a file it
gets from mixcloud and getting the url out of it.

when looking at the code from the mixcloud for kodi it looks like its
decoding a json file.

Code:
--------------------
     keysplit=cloudcast_key.split('/')
  log_if_debug('keysplit[empty, username, slug, empty]=%s' % (keysplit))
  
  # get crsf token
  csrf_token=None
  response=urllib2.urlopen(URL_MIXCLOUD)
  headers=response.info()
  for header in headers.getallmatchingheaders('Set-Cookie'):
  cookie=header.split(': ',1)[1]
  attributes=cookie.split('; ')
  for attribute in attributes:
  pair=attribute.split('=')
  if pair[0]=='csrftoken':
  csrf_token=pair[1]
  log_if_debug('csrf_token=%s' % (csrf_token))
  
  # create graphql
  graphql={
  'query' : 'query HeaderQuery(\n  $lookup: CloudcastLookup!\n) {\n  cloudcast: 
cloudcastLookup(lookup: $lookup) {\n    id\n    isExclusive\n    
...PlayButton_cloudcast\n  }\n}\n\nfragment PlayButton_cloudcast on Cloudcast 
{\n  streamInfo {\n    hlsUrl\n    dashUrl\n    url\n    uuid\n  }\n}\n',
  'variables' : {
  'lookup' : {
  'username' : keysplit[1],
  'slug' : keysplit[2]
  }
  }
  }
  log_if_debug('graphql=%s' % (graphql))
  
  # request graphql
  postdata=json.dumps(graphql)
  headers={
  'Referer' : URL_MIXCLOUD,
  'X-CSRFToken' : csrf_token,
  'Cookie' : 'csrftoken=' + csrf_token,
  'Content-Type' : 'application/json'
  }
  
  request=urllib2.Request(URL_GRAPHQL, postdata, headers, URL_MIXCLOUD)
  response=urllib2.urlopen(request)
  content=response.read()
  json_content=json.loads(content)
  log_if_debug('response=%s' % (json_content))
  
  # parse json
  json_isexclusive=False
  json_url=None
  if STR_DATA in json_content and json_content[STR_DATA]:
  json_data = json_content[STR_DATA]
  if STR_CLOUDCAST in json_data and json_data[STR_CLOUDCAST]:
  json_cloudcast = json_data[STR_CLOUDCAST]
  if STR_ISEXCLUSIVE in json_cloudcast and json_cloudcast[STR_ISEXCLUSIVE]:
  json_isexclusive = json_cloudcast[STR_ISEXCLUSIVE]
  if STR_STREAMINFO in json_cloudcast and json_cloudcast[STR_STREAMINFO]:
  json_streaminfo = json_cloudcast[STR_STREAMINFO]
  if STR_URL in json_streaminfo and json_streaminfo[STR_URL]:
  json_url = json_streaminfo[STR_URL]
  elif STR_HLSURL in json_streaminfo and json_streaminfo[STR_HLSURL]:
  json_url = json_streaminfo[STR_HLSURL]
  elif STR_DASHURL in json_streaminfo and json_streaminfo[STR_DASHURL]:
  json_url = json_streaminfo[STR_DASHURL]
  
  if json_url:
  log_if_debug('encoded url: '+json_url)
  decoded_url=base64.b64decode(json_url)
  url=''.join(chr(ord(a) ^ ord(b)) for a,b in 
zip(decoded_url,cycle(STR_MAGICSTRING)))
  log_if_debug('url: '+url)
  return url
  elif json_isexclusive:
  log_if_debug('Cloudcast is exclusive')
  return STR_ISEXCLUSIVE
  else:
  log_if_debug('Unable to find url in json')
--------------------


now I'm no coder but this looks like there is something encrypted.
with actually a good password :)

Code:
--------------------
    STR_MAGICSTRING=    u'IFYOUWANTTHEARTISTSTOGETPAIDDONOTDOWNLOADFROMMIXCLOUD'
--------------------


but it gets the stream directly from Mixcloud

cheers
Dennis


------------------------------------------------------------------------
cortegedusage's Profile: http://forums.slimdevices.com/member.php?userid=69028
View this thread: http://forums.slimdevices.com/showthread.php?t=88286

_______________________________________________
plugins mailing list
plugins@lists.slimdevices.com
http://lists.slimdevices.com/mailman/listinfo/plugins

Reply via email to