O VK oferece oportunidades de comunicação on-line ilimitadas para seus jovens usuários. Os funcionários de serviços especiais voluntaramente e pessoalmente criaram um dossiê desse grupo de cidadões. O quê isso pode dar para desenvolvedor? Claro que a infraestrutura gratúita para aplicativo! Nas condições quando o servidor está offline mas alguem oferece uma chave de texto e instável que não permite iniciar aplicativo durante viagem, neste caso o VK pelo jeito é opção perfeita. Sem dor de cabeça nenhuma sobre a confiabilidade de servidor e pagamento de hosting.
Capacidades do VK nativo
O API do VK permite bastante. Nos grupos onde publicam notícias com frequência para uma publicação no muro pode ter anexado até dez itens (foto, vídeo, áudio). Podemos criar um aplicativo para ler postagens de notícias. Nós podemos armazenar um vídeo aqui, pode achar que é um cinema no seu aplicativo. Também coloque suas músicas de MP3, fotos ou apenas documentos.
A coisa principal é disfarçar seu conteúdo de caçadores de conteúdo sem licença (criptografar arquivos ou seus nomes). No entanto, tenho certeza de que você não é um pirata e não precisa fazer nada para proteger seu conteúdo;). Resumindo, com o VK podemos fazer:
- Ler notícias
- Cinema online
- Player de MP3 online
- Próprio servidor de fotos
- Matador de Google Docs – o MyVKDoc!
A teoria de API do VK
A descrição dos métodos de API do VK você pode encontrar aqui.
Os métodos que exigem autorização para backend não são convenientes. Muitas vezes os usuários não gostam quando alguem está perguntando sobre outra coisa. Para receber qualquer informação rapidamente o API do VK possui um método que chama-se wall.get. Ele devolve uma lista de notas do muro do usuário ou comunidade. A grande coisa é que isso é um método aberto e não precisa de acess_token.
Assim, se o muro é aberto, qualquer pessoa pode ler. Isso é o quê você precisa para aplicativo de cliente!
Trabalhando com API VK através de Android
O API do VK pode operar com as solicitações comuns de POST e GET, e através de aplicativo de Android que nós, como sempre, vamos pedir ajuda do Android SDK. Usando isso você pode enviar arquivos para servidor de VK e fazer publicações nos muros (método VKApi.wall().post).
Extrato da documentação oficial: preparação para uso
Antes que você começa trabalhar com SDK do VK, você precisa criar o Aplicativo independente na página de desenvolvimento. Salva o ID do seu aplicativo e preenche campos “Nome do pacote para Android”, “Atividade principal para Android” e “Certificado de impressão para Android”.
Com chaves e aplicativo independente tudo é claro mas só tem uma detalhe: usuário em nome do quem publicamos postagens no muro tem que ter as permissões necessárias neste grupo. Pode instalar isso na parte de configuração “Gerenciamento de comunidade -> Participantes”. O aplicativo também tem que pedir permissões no primeiro execução (por exemplo, VKScope.WALL, VKScope.DOCS). Eles estão especificados no método VKSdk.login().
Se o aplicativo oficial de VK é instalado no aparelho, vai aparecer uma janela de pop-up. E se não tem aplicativo, assim, nós vamos observar um fragmento que pede entrada pelo login-senha.
Agora nós conseguimos acessar diretamente os métodos de SDK do Android sem pensar sobre autorização.
Em seguida, enfrentamos o seguinte obstáculo: você pode enviar até 50 mensagens por dia para muro do grupo.
API errorVKError (code: 214; ; Access to adding post denied: you can only add 50 posts a day
Além disso, se enviarmos muito rápido, o SDK nos impedirá com um captcha.
Eu tinha isto depois de 20 documentos baixados um atrás do outro. O algoritmo para aparecimento de captcha os desenvolvedores não vão contar para nós mesmo por amizade, dinheiro ou sob tortura. Experiente, descobri que seria bem seguro para adicionar uma nova postagem a cada 29 minutos. Nessa grande frequência o captcha não deve aparecer mas no limite de 50 mensagens por dia vai.
Aplicativo de notícias
Normalmente quando você publica notícia, você ponha texto e imagens. Para baixar imagens usamos o método VKApi.uploadWallPhotoRequest. Após de baixar, o servidor vai devolver para nós os dados necessários para método de publicação de postagens no muro VKApi.wall().post.
VKRequest post = VKApi.wall().post(VKParameters.from(VKApiConst.OWNER_ID, "-" + TARGET_GROUP, VKApiConst.ATTACHMENTS, attachments, VKApiConst.MESSAGE, message));
O parâmetro de anexos é obtido em resposta VKApi.uploadWallPhotoRequest.
VKRequest request = VKApi.docs().uploadWallDocRequest(new File(file_path), TARGET_GROUP); request.attempts = 10; Log.d("request", "uploadWallDocRequest file_path=" + file_path); request.executeWithListener(new VKRequest.VKRequestListener() { @Override public void onComplete(VKResponse response) { sendProgress("file", "The file is uploaded to the server " + file_path); // sendProgress("file", "Server Response: " + response.json); Log.d("request", "onComplete response=" + response.json); VKApiDocument photoModel = ((VKDocsArray) response.parsedModel).get(0); new File(file_path).delete(); sendProgress("file", "File deleted " + file_path); makePost(new VKAttachments(photoModel), null, s); } @Override public void onError(VKError error) { Log.d("request", "onError error=" + error); // Erro. Informamos o usuário sobre o erro } @Override public void attemptFailed(VKRequest request, int attemptNumber, int totalAttempts) { Log.d("request", "attemptFailed=" + request.toString()); // Tentativa infrutífera. Os argumentos mostrarão o número da tentativa eo número total de tentativas } });
O texto de notícias deve ser enviado para linha de mensagens, chave é VKApiConst.MESSAGE.
Uma publicação pode ter até 10 anexos – imagens, vídeos, áudios e documentos.
Uma caracteristica descoberta: se nós baixamos arquivos de GIF como imagens, então, o JPEG normal vai ser publicado no muro sem animação. Portanto, precisamos carregar o GIF como um documento. Os documentos estão disponíveis nos grupos e não estão disponíveis nas páginas públicas. Uma página pública pode ser transformada em um grupo rapidamente.
Cinema online
Para fazer o download, existe um método chamado VKApi.video().save(); Ele também retorna o endereço do servidor (necessário para baixar) e os dados de vídeo. Em seguida, você precisa executar um pedido de POST para endereço recebido.
O campo video_file deve conter um arquivo de vídeo em formato AVI, MP4, 3GP, MPEG, MOV, MP3, FLV ou WMV. Em resposta, o aplicativo recebe o tamanho do arquivo baixado e o ID do vídeo ou mensagem de erro em formato JSON:
{"size":1234,"video_id":1234567} ou {"error":Error description}
Após o download, o vídeo é processado mas na lista de gravações de vídeo pode aparecer depois de um tempo.
MP3 player online
Aqui podemos usar o método VKApi.audio().GetUploadServer() com que vamos conseguir de carregar o servidor. Então, como foi com vídeo, você precisa baixar o arquivo com uma solicitação de POST mas o campo do arquivo deve conter um arquivo MP3. Em resposta, o aplicativo recebe dados de servidor, áudio e data de hash em formato JSON:
{"server": "1234", "audio": "1234", "hash": "12345abcde"}
Usando o método VKApi.audio().save(), o aplicativo passa os dados recebidos para o servidor (servidor, áudio e hash) e recebe dados sobre o áudio baixado.
O próprio servidor de fotos
Você pode baixar imagens sem solicitações de POST usando simples métodos VKApi.uploadWallPhotoRequest e VKApi.uploadAlbumPhotoRequest. Os nomes falam por si mesmo. Por seu próprio “Instagram” VKApi.uploadAlbumPhotoRequest é mais preferido, uma vez que as fotos devem ser colocadas em álbuns, em vez de jogá-los no muro de jeito caótico.
VKRequest request = VKApi.uploadWallPhotoRequest(VKUploadImage image, int user_id, int group_id); VKRequest request = VKApi.uploadAlbumPhotoRequest(VKUploadImage image, int album_id, int group_id); VKRequest request = VKApi.uploadWallPhotoRequest(File image, int user_id, int group_id); VKRequest request = VKApi.uploadAlbumPhotoRequest(File image, int album_id, int group_id);
Quando faz o upload de uma foto para o seu muro ou muro do grupo user_id == 0, no caso contrário id do usuário no muro do qual enviamos uma foto.
Quando faz o upload de uma foto para um muro ou para um álbum group_id == id do grupo de destino, no caso contrário group_id == 0 (por exemplo, carregar fotos para o seu álbum). Em album_id, respetivamente, é o ID do álbum de fotos.
MyVKDoc
Para carregar documentos precisamos VKApi.docs().UploadDocRequest() ou VKApi.docs().UploadWallDocRequest para documentação do “muro”. Bom e em seguida, como sempre, executamos VKApi.wall().post com parâmetros que vieram de VKApi.docs(). UploadWallDocRequest.
Conclusão
Aparentemente, o API do VK dá para nós muito espaço para criatividade. Uma loja de dados completamente gratuita, não é isso sobre que sonham todos os desenvolvedores? No próximo artigo sobre um exemplo de cliente de Android para grupo, consideraremos em detalhes como você pode tirar dados de um muro aberto.