Pythonを使用してvkontakte音楽データベースのバックアップを作成する

1年前、連絡先プレイリストにあった音楽のビネグレット付きUSBフラッシュドライブが必要でした。 ところで、そこには、ほぼ1400トラックあります。



そのため、私が最初にしたことは、オペラ拡張機能のリストを開き、検索で「vkontakte」と入力することでした。 しかし、ここにチャンスがあります。すべてのアプリケーションが1つのトラックをダウンロードし、基本的にその横にダウンロードボタンを追加します。 原則として、そこから1つまたは2つのトラックをプルする必要がある場合に便利ですが、1400本ある場合は...



次のステップは、ページを分割し、そこからリンクと名前を引き裂くために、音楽と注意深い瞑想を含むページを開くことでした。 少し考えて、VKontakte APIをもう一度使用してみませんか? 結局のところ、私は既にそれを使用した経験があります(Qtでデスクトッププレーヤーを作成しました)。 しかし、特にプラスまたは他の言語で、本格的なアプリケーションを作成することは、私には少しスマートなソリューションではないように思えました。 そして、私は考えました-いまいましい、Pythonがあります、私はスクリプトをリベットし、すべてを締めます。 したがって、選択が行われ、コーディングを開始します。



Geanyを開き、最初の行を記述します...そして、ここで、私の想像力と彫刻をしたいという欲求が、何も再生されないことから組み合わされます。 さらにカットの下。





それで、エディターは開いており、頭脳は働いており、ジューダス・プリーストはヘッドフォンで遊んでおり、次の作品は私のペンの下から出てきます。



Linuxはどこにでもあるので、ワークステーション、コンピューター、ラップトップでWindowsの臭いがしないので、標準のwgetを使用して起動することにしました。 そして、コンソールの排気は美しいです。



まず、インターネット接続をチェックする小さな関数を作成することにしました。 これを行うには、google.comを開いてみてください。



def checkConnection(): #,     . try: response = urllib2.urlopen('http://google.com', timeout = 1) return True except urllib2.URLError as err: pass return False
      
      







Googleが開いている場合、関数はtrueを返し、開いていない場合はfalseを返します。



それから、私の不屈の幻想は、システムにwgetが存在するかどうかを確認するために、もう1つ確認することにしました。



 def checkWget(): #    wget print "  wget.    - **..." testfilename = "x_8091546b.jpg" cmd = "wget http://cs5705.vkontakte.ru/u403273/139647416/x_8091546b.jpg" os.popen(cmd) chk = os.path.exists(testfilename) if chk == True: print ", wget  ,  , .  , !" os.remove(testfilename) else: print " ,  .  wget,      -!" exit() return
      
      







検証機能の準備ができたので、ダウンロードプロセスを開始します。 ファンタジーは、スクリプトにユーモアを少し加えることを決めたので、すべてがいつものように平凡ではなかったので、実際、結果はここにあります。



苦労せずに、連絡先サーバーでの認証に標準のシステムブラウザーを使用することにしました。Pythonを使用してすべてを行うのではなく、特にスクリプトが毎日実行されないため、より高速で便利だと思われました。



 print ", !    grabVK.         ." print "     , ,  ,     ." print "              " print "  , " print " " print "   ..." inON = checkConnection() #   . if inON == True: print "  !" else: print " ,     .   ,    =)" exit() print ",     ,    " print ",     ,      wget!" print "      wget?" print "  ,     -   y,   - n,     =)" answer = raw_input("    wget?: ") if answer == "y": print "  ,  .   ,    !" else: checkWget() print "   -  , ?             " print "    -  ,        -     !" print "        , ? !" print " ,    ,   ,  access_token, expires_in  user_id,   & " print "          ,  " answer = raw_input("?: ") if answer == "y": print "  , !" else: print "   !   !" exit() webbrowser.open_new_tab("http://api.vkontakte.ru/oauth/authorize?client_id=2223684&scope=audio&redirect_uri=http://api.vk.com/blank.html&display=page&response_type=token") access_token = raw_input("access_token: ") print ",   expires_in." expires_in = raw_input("expires_in: ") print "   !   ." user_id = raw_input("user_id: ") print " !    .       . !" print ",   , !"
      
      







そのため、このコードが実行されると、システムブラウザーが開き、vkontakte APIサーバーに認証ページが表示されます。 認証を機能させるには、IDを割り当てるvkontakteアプリケーションを作成する必要があります。これは認証リンクで指定する必要があります。 このようなアプリケーションは、デスクトッププレーヤー用であっても、かなり前に作成しました。 ブラウザに3つのパラメータが指定された行がブラウザに表示されます。これらのパラメータは、コピーアンドペーストメソッドを使用してスクリプトに渡す必要があります。これらはXML形式のデータベースを取得するために必要です。



パラメータが受信され、すべてがリストを取得して解析する準備ができました。 XMLの解析にはLxmlが使用されます。



 url = "https://api.vkontakte.ru/method/audio.get.xml?uid=" + user_id + "&access_token=" + access_token page = urllib2.urlopen(url) html = page.read() print "  , ..." artistMas = [] titleMas = [] urlMas = [] number = 0 print "   ..." doc = lxml.html.document_fromstring(html) for artist in doc.cssselect('artist'): artistMas.append(artist.text) number = number + 1 print "OK" print "   ..." for title in doc.cssselect('title'): titleMas.append(title.text) print "OK" print "   ..." for urlm in doc.cssselect('url'): urlMas.append(urlm.text) print "OK" print ""
      
      





アーティスト、トラック、リンクのリストを受け取りました。 ダウンロードを開始します。 ダウンロードはダウンロードディレクトリに作成されます。 また、履歴書も追加されます-音楽ファイルがダウンロードディレクトリに既に存在する場合、それらは再度ダウンロードされず、スキップされます。これは、vkontakteプレイリストをローカルのプレイリストと同期する必要がある場合に便利です。



 print " ,    ! , ,    !" print "..         -       " print ",     " path = "download" if os.path.exists(path): "  ,   " else: os.makedirs(path) print "    .  ..." print number answer = raw_input("?: ") if answer == "y": print " ,  !" else: print "   !   !" exit() for i in xrange(0, number-1): print ":" print i print " " filename_new = path+"/"+artistMas[i]+ " - " + titleMas[i] + ".mp3"; if os.path.exists(filename_new): print "   ,   " else: downCmd = "wget -P" + path + " " + urlMas[i] os.popen(downCmd) p = re.compile(r"[0-9a-zA-Z]+\.mp3$") filename = p.findall(urlMas[i]) try: os.rename(path+"/"+filename[0], path+"/"+artistMas[i]+ " - " + titleMas[i] + ".mp3") except: print " ,    !" print " " print " ! !"
      
      







以上です。 スクリプトは数回チェックされ、常に正常に-バックアップは100%完了し、再開などが行われました。



また、Linuxでは、ダウンロードディレクトリを作成する場所に置く必要はなく、cdコマンドでそこに移動し、直接パスでスクリプトを実行する必要があることにも注意してください。

cd /data/vkmusic

python /home/zhbert/projects/pufrabvk.py






長い間彼女を目にしていなかったので、Windowsでどうなるかは覚えていません。



説明とファイル自体はこちらです。



最後に、スクリプトのスクリーンショット:

画像







All Articles