Работа с закрытым 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 . Я не кусаюсь :)