SELECT * FROM Vzakladke.net

Статьи об автоматизации и программировании


Скачать музыку с вк из своего аккаунта на JAVA

 

 

Список аудиозаписей получается через API сайта, для доступа к API нужен access token (токен доступа). Для получения токена необходимо перейти по адресу (это стандартный способ, описанный в документации vk для разработчиков):

https://oauth.vk.com/authorize?client_id=3711445&scope=audio& redirect_uri=https://oauth.vk.com/blank.html&display=page&v=5.0&response_type=token 

и на загрузившейся страничке разрешить доступ приложению к своим аудиозаписям, после этого вы будете перенаправлены по адресу вида:

https://oauth.vk.com/blank.html#access_token=abc&expires_in=86400&user_id=123456 

вот параметр access_token нам и нужен — запомним его. Последний параметр user_id — это ваш идентификатор пользователя, тоже понадобится.

Выполнив эти действия, Вы, фактически предоставили доступ моему приложению к списку ваших аудиозаписей, но т. к. полученный при это токен мне неизвестен — то и доступа нет, для пущей безопасности можете зарегистрировать свое приложения на vk и использовать его app_id.

 

 

А далее рассмотрим код

Итак, токен у нас есть, можем приступить к скачиванию, в двух словах схема следующая: получаем список аудиозаписей в формате JSON, распарсиваем необходимою нам информацию (название песни, имя исполнителя и собственно адрес mp3 файла) и загружаем файл, придав ему осмысленное название.

 

 

package org.mysite;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;

public class VkAudioDownload {

    public static void main(String[] args) throws URISyntaxException, IOException, ParseException {
        String ACCESS_TOKEN = "abcdefghijklmnopqrstuvwxyz";
        String USER_ID = "1234567";

        URIBuilder builder = new URIBuilder();
        builder.setScheme("https").setHost("api.vk.com").setPath("/method/audio.get")
                .setParameter("oid", USER_ID)
                .setParameter("need_user", "0")
                .setParameter("count", "20") // число загружаемых аудиозаписей
                .setParameter("offset", "20") // смещение, необходимое для выборки определенного количества аудиозаписей
                .setParameter("access_token", ACCESS_TOKEN);
        URI uri = builder.build();
        HttpGet httpget = new HttpGet(uri);

        HttpClient httpclient = new DefaultHttpClient();
        HttpResponse response = httpclient.execute(httpget);
        HttpEntity entity = response.getEntity();
        if (entity != null) {
            InputStream instream = null;
            try {
                instream = entity.getContent();
                String responseAsString = IOUtils.toString(instream);
                parseAndDownload(responseAsString);
            } finally {
                if (instream != null)
                    instream.close();
            }

        }



    }

    private static void parseAndDownload(String resp) throws IOException, ParseException {
        JSONParser parser = new JSONParser();
        JSONObject jsonResponse = (JSONObject) parser.parse(resp);
        JSONArray mp3list = (JSONArray) jsonResponse.get("response");
        for (int i=1; i<mp3list.size(); i++) {
            JSONObject mp3 = (JSONObject) mp3list.get(i);

            // папка должна существовать
            String pathname = "D:/music/" + fixWndowsFileName(mp3.get("artist") +
                    " - " + mp3.get("title"));
            try {
                File destination = new File(pathname + ".mp3");
                if (!destination.exists()) {
                    FileUtils.copyURLToFile(new URL((String) mp3.get("url")), destination);
                }
            } catch (FileNotFoundException e) {
                System.out.print("ERROR "+pathname);
            }
        }
    }

    private static String fixWndowsFileName(String pathname) {
        String[] forbiddenSymbols = new String[] {"<", ">", ":", "\"", "/", "\\", "|", "?", "*"};
        String result = pathname;
        for (String forbiddenSymbol: forbiddenSymbols) {
            result = StringUtils.replace(result, forbiddenSymbol, "");
        }
        return StringEscapeUtils.unescapeXml(result);
    }


}

 

Дата публикации: 2015-04-29 23:23:47

JAVA

0

Отзывы:

Ваше имя:

Ваш e-mail (необязательно):

Сообщение:

Captcha