Получаем музыку Вк через сторонний API

в 7:58, , рубрики: api, hack, python, Вконтакте API, фичи и баги

В этот раз дело начиналось после закрытия методов audio в методе execute.

Я решил посмотреть, как получают музыку сайты, которые предоставляют возможность ее скачать. Меня заинтересовал сайт vrit.me.

Я залез во вкладку network и увидел интересный запрос:

фото
Получаем музыку Вк через сторонний API - 1
Получаем музыку Вк через сторонний API - 2
Получаем музыку Вк через сторонний API - 3

То есть, можно подделать POST запрос к этому сайту, и использовать его, как API для музыки vk, что я сразу и реализовал:

import json,requests
s = requests.post("https://vrit.me/data.php",data={
    "method": "audio.get",
    "count": 1000000000,
    "offset": 0,
    "user_id":-52922518})
s = json.loads(s.text)
print(s)

В результате получил такой ответ:

{'response': {'count': 2, 'items': [{'id': 456239018, 'owner_id': -52922518, 'artist': 'CORVUS', 'title': 'Осеннее смятение [ЗС]', 'duration': 126, 'date': 1474194635, 'url': 'https://cs1-81v4.vkuseraudio.net/p18/894f30b49d3571.mp3?extra=5xovvbyqXrdr0Ixl9FLteg-pRRC29pGr_yO8mDgqNN_4kLlxJe1gHST8S8bVy2IQt0wYFAC1tMCnF7p5ujeB7K1jFPfYSCaEuxjh5P92VT81AMd9AlIJx2GQp613xHxCRbXCynv6fqdhFcPwvyZaRvg', 'lyrics_id': 370291093, 'genre_id': 18, 'is_licensed': True, 'is_hq': True, 'track_genre_id': 11, 'access_key': '7b762a5b22b452d0ca'}, {'id': 456239017, 'owner_id': -52922518, 'artist': 'CORVUS', 'title': 'Записки сумасшедших [ЗС]', 'duration': 132, 'date': 1470474699, 'url': 'https://cs1-81v4.vkuseraudio.net/p4/7f6c08b134e0a7.mp3?extra=MgBr8oDpO-7f2l_qmtHZGAMD608vcqWxA8OLNgcyZDdA8aVc2Jlj9bDW48FW8S5zDA9jO-geAEUaF_LvFUP_DFiGZEFo-5B92YhcMYMpyuvi6tFt_nO4QVwjJjNhG-Ln3dOfkC4KY2Cywk_attG5fSQ', 'lyrics_id': 370291112, 'genre_id': 18, 'is_licensed': True, 'is_hq': True, 'track_genre_id': 11, 'access_key': '8717a672801e7a15fa'}]}}

НО! т.к. любая ссылка на аудио вк привязывается к IP адресу компьютера,

Получаем музыку Вк через сторонний API - 4

то когда я открыл ее на своем пк, то получил ошибку:

Получаем музыку Вк через сторонний API - 5

Дальше я все-таки решил посмотреть, как на самом сайте vrit.me генерируется ссылка. Оказалось, что эта ссылка подставляется в другую ссылку и в результате на выходе получается ссылка вида

https://vrit.me/download?artist=Егор Крид&title=ЭТОМОЕ&url=https://cs1-60v4.vkuseraudio.net/p20/6d11e54193b7e0.mp3?extra=CZi_FWKxxoYdOTg7Sz4cksgJ_l12bqsxH8wZFPRoN6t7qf4at_MDouTA6MDmsLiaoFrDJDswVzKozagVNVCskf3LiR3ry-JvP9WHgisWn7nq7BradXYcffgAlQH2VTWoTFDgpVwhdRZMUV6ATpr6KQ

Получаем музыку Вк через сторонний API - 6

То есть нам надо всего лишь полученную ссылку «вписать» в другую ссылку. Реализация:

for i in range(len(data["response"]["items"])):
    url = data["response"]["items"][i]["url"]
    title = data["response"]["items"][i]["title"]
    artist = data["response"]["items"][i]["artist"]
    data["response"]["items"][i]["url"] = "https://vrit.me/download?title={title}&artist={artist}&url={url}".format(url=url,title=title,artist=artist)

Другие методы с аудио

Еще я попытался вызвать такие методы как «audio.getById», «audio.search», «audio.getCount», «audio.getLyrics», «audio.getAlbums» но из них работает только один метод «audio.search», и то, искать по музыке пользователя нельзя, можно только в глобальном поиске. Код:

s = requests.post("https://vrit.me/data.php",data={
                "method": "audio.search",
                "count": 3,
                "offset": 0,
                "q":q})
data = json.loads(s.text)
if "response" in data:
    data = data["response"]
    for i in range(len(data["items"])):
         url = data["items"][i]["url"]
         title = data["items"][i]["title"]
        artist = data["items"][i]["artist"]
        data["items"][i]["url"] = "https://vrit.me/download?title={title}&artist={artist}&url={url}".format(url=url,title=title,artist=artist)

Финальный код

import requests,json
class audio():
    def get(owner_id):
        s = requests.post("https://vrit.me/data.php",data={
                "method": "audio.get",
                "count": 1000000000,
                "offset": 0,
                "user_id": owner_id})
        data = json.loads(s.text)
        if "response" in data:
            data = data["response"]
            
            for i in range(len(data["items"])):
                url = data["items"][i]["url"]
                title = data["items"][i]["title"]
                artist = data["items"][i]["artist"]
                data["items"][i]["url"] = "https://vrit.me/download?title={title}&artist={artist}&url={url}".format(
                                                    url=url,
                                                    title=title,artist=artist)
        return data
    def search(q):
        s = requests.post("https://vrit.me/data.php",data={
                "method": "audio.search",
                "count": 300,
                "offset": 0,
                "q":q})
        data = json.loads(s.text)
        if "response" in data:
            data = data["response"]
            for i in range(len(data["items"])):
                url = data["items"][i]["url"]
                title = data["items"][i]["title"]
                artist = data["items"][i]["artist"]
                data["items"][i]["url"] = "https://vrit.me/download?title={title}&artist={artist}&url={url}".format(
                                                    url=url,
                                                    title=title,artist=artist)
        return data

Вызывать этот класс можно так:

import bot_vk#pip install bot_vk==1.7
info1 = bot_vk.audio.get(owner_id=1234567)
info2 = bot_vk.audio.search(q="imagine dragons")

ВНИМАНИЕ! Автор этого поста не несет ответственности за какие-либо Ваши действия. Этот пост создан только с ознакомительными целями!

Автор: SuperHackerVk

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js