Работа с закрытым VK API
@FlerryВсем привет, дамы и господа! Прошло уже много дней с момента закрытия музыкальной составляющей VK API и многие подумали, что это все, но не сегодня! Представляю вам две интересных штуки для восстановления доступа к API и немного сладкого. Поехали!
Лазейки, дающие нам доступ к API:
- Конечно, они могли нам закрыть доступ, ведь мы же "смертные", но как же "большие проекты"? Stelio, Lync, Kate и многие другие?? Им-то точно нужна музыка! Вот под них мы и замаскируемся :) Берем отсюда любой token и наслаждаемся! Одно но: ссылки на audio мы получить не сможем, однако, по слухам, можно взять там же официальные токены и замаскироваться под мобильное приложение, отправив в заголовке строку от мобильного приложения вк.
- Самое интересное! Кто нас спасет? Нас спасет код! И действительно, если авторизоваться любым приложением, получить token и позже использовать его в голых get-запросах из своего кода, то у нас все получится! Нам даже ссылки отдают без боя О.о
Доказательство:

import org.json.JSONArray;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
public class AudioSearch extends Thread {
private String songName;
private Long chatId;
public AudioSearch(String songName, Long chatId) {
this.songName = songName;
this.chatId = chatId;
}
@Override
public void run() {
TgBot bridge = new TgBot();
StringBuilder sb = new StringBuilder();
String VkQuery = null;
try {
VkQuery = "https://api.vk.com/method/audio.search?q=" + URLEncoder.encode(songName, "UTF-8") + "&count=10&sort=2&access_token=your_token&v=5.60";
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
int counter;
HttpURLConnection connection = null;
try {
connection = (HttpURLConnection) new URL(VkQuery).openConnection();
connection.setRequestMethod("GET");
if (HttpURLConnection.HTTP_OK == connection.getResponseCode()) {
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
String response;
while ((response = in.readLine()) != null) {
JSONObject obj = new JSONObject(response);
JSONArray parseAll = obj.getJSONObject("response").getJSONArray("items");
for (counter = 0; counter < 10; counter++) {
try {
JSONObject all = parseAll.getJSONObject(counter);
sb.append("Исполнитель:").append(" ").append(all.getString("artist")).append("\n");
sb.append("Название:").append(" ").append(all.getString("title")).append("\n");
sb.append("Ссылка:").append(" ").append(all.getString("url")).append("\n\n");
} catch (Exception e) {
System.out.println("Not find");
}
}
}
bridge.sendMsgCustomUser(chatId, sb.toString());
} else {
System.out.println("fail:" + connection.getResponseCode() + ", " + connection.getResponseMessage());
}
} catch (Throwable cause) {
cause.printStackTrace();
} finally {
if (connection != null) {
connection.disconnect();
}
if (!currentThread().isInterrupted()) {
currentThread().interrupt();
}
}
if (!currentThread().isInterrupted()) {
currentThread().interrupt();
}
}
}
Это готовый код, в который надо лишь подставить token, ну и чуток его подравнять (сделать URIBilder и т.д.).
Результат - @VkASBot . Сделано на коленке и нормально работает.
Ну или часть от бота @URLMediaBot. Тоже мое и работает с ВК на ура (ну и всякими вашими ютьюбами, soundcloud, facebook... etc...)
Небольшой набор сайтов для скачки музыки без ботов/написания своего:
https://downloadmusicvk.ru (хорошая штука, можно даже с помощью нее и качать (просто берем url и подставляем в него нужные данные, спаршенные с вк)
http://vk-music.ru/?q=Beatles (вроде ничего... Немного пугает дизайн)
http://vk-music.biz (замечательная штука, говорят, правда, что есть небольшие ограничения, но это лишь слухи)
P/s Любые вопросы/предложения и всякую всячину можно скидывать мне в Telegram - @Flerry . Я не кусаюсь :)