Страницы

Поиск по вопросам

пятница, 14 июня 2019 г.

Не могу получить популярные аудиозаписи VK

получаю токен юзера и сразу пытаюсь получить
VKRequest audios = VKApi.audio().getPopular();
И получаю error 15 :( Читал, что сторонние разработчики не могут работать с аудио но как же тогда работает это
Что я не так делаю? И вообще почему для получения популярных аудиозаписей нужен токен? Мне их надо получать даже если пользователь не залогинился.


Ответ

PROFIT!
Я это сделал! Декомпилировал одно приложение и узнал какой сейчас используется хак.
main.xml



MainActivity.java
public class MainActivity extends Activity { public class VkontakteWebViewClient extends WebViewClient { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); MainActivity.this.parseUrl(url); } }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); WebView kateWV = (WebView)findViewById(R.id.kateWebView); kateWV.getSettings().setJavaScriptEnabled(true); kateWV.clearCache(true); kateWV.setWebViewClient(new VkontakteWebViewClient()); CookieSyncManager.createInstance(this); CookieManager.getInstance().removeAllCookie(); kateWV.loadUrl(Auth.getUrl("2685278", Auth.getSettings())); }
public void parseUrl(String url){ if (url != null) { try { if (url.startsWith(Auth.redirect_url)) { if (!url.contains("error=")) { String[] auth = Auth.parseRedirectUrl(url); saveTokenToSharedPreferences(getApplicationContext(), Auth.VK_SDK_ACCESS, "scope=groups,audio,offline&https_required=1&expires_in=0&access_token=" + auth[0] + "&user_id=" + Long.parseLong(auth[1])); } startActivity(new Intent(MainActivity.this, AudioActivity.class)); finish(); } } catch (Exception e) { e.printStackTrace(); } } } public void saveTokenToSharedPreferences(Context ctx, String tokenKey, String code) { SharedPreferences.Editor edit = PreferenceManager.getDefaultSharedPreferences(ctx).edit(); edit.putString(tokenKey, code); edit.apply(); } }
Auth.java
public class Auth { public static final String VK_SDK_ACCESS = "VK_SDK_ACCESS_TOKEN_PLEASE_DONT_TOUCH"; public static String redirect_url;
static { redirect_url = "https://oauth.vk.com/blank.html"; }
public static String getUrl(String api_id, String settings) { return "https://oauth.vk.com/authorize?client_id=" + api_id + "&display=mobile&scope=" + settings + "&redirect_uri=" + URLEncoder.encode(redirect_url) + "&response_type=token" + "&v=" + "5.53"; }
public static String getSettings() { return "notify,friends,photos,audio,video,docs,status,notes,pages,wall,groups,messages,offline,notifications"; }
public static String[] parseRedirectUrl(String url) throws Exception { String access_token = Utils.extractPattern(url, "access_token=(.*?)&"); String user_id = Utils.extractPattern(url, "user_id=(\\d*)"); if (user_id == null || user_id.length() == 0 || access_token == null || access_token.length() == 0) { throw new Exception("Failed to parse redirect url " + url); } return new String[]{access_token, user_id}; } }
В итоге после авторизации через WebView в preferences будет сохранен токен
scope=groups,audio,offline&https_required=1&expires_in=0&access_token=тут_токен_юзера&user_id=тут_id_юзера
Далее можно работать с API VK. Лично у меня происходит переход в AudioActivity
Примерный код
VKRequest request = VkApi.audio().getPopular(); request.executeWithListener(new VKRequest.VKRequestListener() { @Override public void onComplete(VKResponse response) { //выводим json с музыкой в логи Log.d("vkmusic", response.responseString); } @Override public void onError(VKError error){ Log.d("err", error.toString()); } }); request.start();
Ну и все, можно юзать.
Результат

Комментариев нет:

Отправить комментарий