CollegeHumor上的Prank War系列原创视频 NetEase Youdao Nanti PWND! [Spoiler]
03

Basic structure

Google (China) Music website frontend is very traditional:

http://www.google.cn/music/song?id=S2894c9e5fc5df536
http://www.google.cn/music/album?id=B700dfba92c77567d
http://www.google.cn/music/artist?id=A21d5906abfad070c

Streaming

Google (China) Music service includes an online player made with Flex. The Streaming of .mp3 files & .lrc lyrics files is powered by ChinaCache. Here's a sample streaming query with XML result

In the URL query, parameter sig=7df9df980d74d35d28efe461842d76f1 refers to: MD5.hash(KeyContainer.PLAYER_KEY + param1.id);,

where KeyContainer.PLAYER_KEYM is defined at com.google.music.projectm.player.generated.KeyContainer.as as follows:

package com.google.music.projectm.player.generated
{

    public class KeyContainer extends Object
    {
        static public const PLAYER_KEY:String = "eca5badc586962b6521ffa54d9d731b0";

        public function KeyContainer()
        {
            return;
        }
    }
}

So the pseudo algorism for sig is:

md5("eca5badc586962b6521ffa54d9d731b0" + "S40dbcfe0c610fa09") = "7df9df980d74d35d28efe461842d76f1"

Download

Download is pretty easy, just try this link:

http://www.google.cn/music/top100/musicdownload?id=Sc623893aee83dfb4

and parse the <a> element:

<a href="/music/top100/url?q=http%3A%2F%2Ffile1.top100.cn%2F200905031622%2FFA4C7C8006CDB6F605DE00A4714A421A%2FSpecial_28506%2FWTF.mp3&ct=rdl&cad=dl&ei=V1T9SdDnNpuYsAKE8ua6AQ&sig=9EC3F52AC3B1F3857871AAF885AD2A2D"><img src="http://www.gstatic.cn/top100/images/download_icon.png" alt="" style="border: none;"></a>

libgugemusic

libgugemusic.py is a simple library for interacting with Google (China) Music service written in pure Python

Example:

>>> import libgugemusic
>>> libgugemusic.download_mp3_by_id('S40dbcfe0c610fa09')
'http://file3.top100.cn/200905031859/42B67F4B5A23786601DB7781B75E509A/Special_12
3690/%E8%8A%B1%E8%9D%B4%E8%9D%B6.mp3'
>>> libgugemusic.stream_mp3_by_id('S40dbcfe0c610fa09')
{'songUrl': 'http://audio2.top100.cn/200905031859/6186071D9F22FB7C15048C81BE0241
7B/streaming2/Special_123690/%E8%8A%B1%E8%9D%B4%E8%9D%B6.mp3', 'lyricsUrl': 'htt
p://lyric.top100.cn/Special_123690/M0123690001.lrc', 'label': '\xe5\x8d\x8e\xe7\
xba\xb3\xe5\x94\xb1\xe7\x89\x87\xe5\x85\xac\xe5\x8f\xb8(Warner Music)', 'provide
rId': 'M0123690001', 'albumThumbnailLink': 'http://www.gstatic.cn/base_media?q=h
ttp://pic.top100.cn/SpecialImg/middle_special_123690.jpg&size=2&hl=cn&am
p;fact=194&dhm=8bddb8f1'}

You can get libgugemusic.py on my Google Code SVN repository

I'll expand this library with music location function, and finally integrate Google (China) Music service with Last.FM radio.getPlaylist as an alternative to Last.FM, Pandora & Spotify.

4 Responses to “libgugemusic: Google Music Streaming & Download”

  1. bones7456 Says:

    干得不错,也许你对这个感兴趣? http://code.google.com/p/gmbox/
    我写的介绍: http://li2z.cn/2009/04/10/gmbox_alpha/
    现在代码还有点乱,需要整理一下下...有兴趣加入不?

    Reply

  2. lonevan Says:

    'http://audio2.top100.cn/200905031859/6186071D9F22FB7C15048C81BE0241
    7B/streaming2/Special_123690/%E8%8A%B1%E8%9D%B4%E8%9D%B6.mp3'

    how can you get the string ,i think it is generated automatically..is the method you metioned (md5calc)?

    hope your reply

    Reply

    electronixtar reply on 五月 31st, 2009 16:06:

    use the :source, luke.

    Reply

  3. lonevan Says:

    something wrong happened..
    http://www.google.cn/music/songstreaming?id=Sb2d24d397df415ec&client=&output=xml&sig=69bcae919b622a999868c5425eb7a591&cad=pl_player
    like the url above,hashlib.md5(PLAYER_KEY + id) != sig..
    was the PLAYER_KEY changed?

    Reply

Leave a Reply