Giter Club home page Giter Club logo

vkontakte_api's Issues

@vk.ads.get_targeting_stats - неверно преобразовывает имя метода для запроса

Делаем запрос @vk.ads.get_targeting_stats...
DEBUG -- : POST https://api.vk.com/method/ads?access_token=...

А должно быть.
https://api.vk.com/method/ads.getTargetingStats?

Вообще эта игра с переименованиями методов оч. странна, да это ruby way, но было бы круто иметь опцию отключить переименование.

И писать просто @vk.ads.getTargetingStats, или вообще @VK(method: "ads.getTargetingStats") - тогда бы вообще ну нужно было бы ничего переименовывать, ну так уж повелось, что vk не на руби писали =)

Ошибка демо приложения

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

We're sorry, but something went wrong.

Exception handling

Периодически при работе с Вконтакте возникают разные ошибки:
Проблемы с сетью (аля getaddrinfo: Name or service not known (SocketError))
Превышение лимита api (Too many requests per second)
И т.д.

Хотелось бы в данном случае избегать падения, а ждать пару секунд и повторять запрос (Ну и падать, если после пары попыток возникает ошибка).
Хотел спросить совета, как это лучше организовать, в голову хороших решений не лезет.

app server authorization

1.9.3-p327-perf :059 > VkontakteApi.configure{|c| c.app_id = VK_APP_ID; c.app_secret=VK_APP_SECRET; }
 => VkontakteApi 
1.9.3-p327-perf :060 > vk = VkontakteApi.authorize(type: :app_server)
OAuth2::Error: invalid_client: client_secret is undefined
{"error":"invalid_client","error_description":"client_secret is undefined"}
    from /home/proton/.rvm/gems/ruby-1.9.3-p327-perf/gems/oauth2-0.8.0/lib/oauth2/client.rb:108:in `request'
    from /home/proton/.rvm/gems/ruby-1.9.3-p327-perf/gems/oauth2-0.8.0/lib/oauth2/client.rb:131:in `get_token'
    from /home/proton/.rvm/gems/ruby-1.9.3-p327-perf/gems/oauth2-0.8.0/lib/oauth2/strategy/client_credentials.rb:24:in `get_token'
    from /home/proton/.rvm/gems/ruby-1.9.3-p327-perf/gems/vkontakte_api-1.1/lib/vkontakte_api/authorization.rb:55:in `authorize'
    from (irb):60
    from /home/proton/.rvm/gems/ruby-1.9.3-p327-perf/gems/railties-3.2.12/lib/rails/commands/console.rb:47:in `start'
    from /home/proton/.rvm/gems/ruby-1.9.3-p327-perf/gems/railties-3.2.12/lib/rails/commands/console.rb:8:in `start'
    from /home/proton/.rvm/gems/ruby-1.9.3-p327-perfgems/railties-3.2.12/lib/rails/commands.rb:41:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

VK_APP_ID и VK_APP_SECRET верные, если вручную (curl'ом) вызывать ссылку https://oauth.vk.com/access_token, то нормально отдаёт access_token.

Yajl::ParseError: lexical error: invalid character inside string.

Hi

I'm trying to perform this request @app.groups.getById(gids:"23201, 23202, 23203",fields:"country,city")

It's returning error.

Yajl::ParseError: lexical error: invalid character inside string.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!","screen_name":"club23202","
(right here) ------^

from /Users/.rvm/gems/ruby-1.9.3-p0/gems/yajl-ruby-1.1.0/lib/yajl.rb:36:in `parse'
from /Users/.rvm/gems/ruby-1.9.3-p0/gems/yajl-ruby-1.1.0/lib/yajl.rb:36:in `parse'
from /Users/.rvm/gems/ruby-1.9.3-p0/gems/vkontakte_api-0.2.1/lib/vkontakte_api/api.rb:22:in `call'
from /Users/.rvm/gems/ruby-1.9.3-p0/gems/vkontakte_api-0.2.1/lib/vkontakte_api/resolver.rb:48:in `method_missing'
from (irb):11
from /Users/.rvm/rubies/ruby-1.9.3-p0/bin/irb:16:in `<main>'

Any idea to fix it?

генерит не верные ссылки

после поиска аудиозаписей

VkontakteApi::Client.new(session[:token]).audio.get(uid: 167270710)

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

вот что нашел в постах:
"Для каждого пользователя ссылка на файл является уникальной. Прежде, чем получить ссылку, вы должны представится системе. Естественно, браузер и php это разные пользователи. Либо вы должны имитировать через headers/curl браузер."

взято от сюда:
http://hashcode.ru/questions/161857/php-404-not-found-%D0%BF%D1%80%D0%B8-%D0%BF%D0%BE%D0%BF%D1%8B%D1%82%D0%BA%D0%B5-%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C-get_headers-vk

Для VkontakteApi.authorize нужен доп параметр redirect_uri

У ВК немного поменялись правила авторизации, точнее стали проверять наличие redirect_uri в запросе на токен, раньше не просили.

Вот доказательства,

http://vk.com/topic-1_21972169?post=52899
http://xsave.ru/topic-1_21972158?post=52679

Причем все хитро у них для старых приложений (правда не всегда) остается совместимость.
На новых без redirect_uri работать не будет.

Push new version, please

@7even push new version, please, так как в #54 мы изменили зависимости... Хочется использовать новую версию.

Thanks!

Audiofile upload

Доброго дня.
Есть ли опыт загрузки аудиофайлов на сервер?
Я делаю так:

vk = VkontakteApi::Client.new(Rails.application.secrets.vkontakte_token)
audio = '/var/www/flat.fm/1.mp3'
# получить адрес сервера для загрузки аудиофайла
audio_upload_url = vk.audio.get_upload_server.upload_url
# загрузить на сервер
upload_audio = VkontakteApi.upload(url: audio_upload_url, audio: [audio, MIME::Types.type_for(audio).first.content_type])

Вывод:

POST https://pu.vk.com/c613726/upload.php?act=add_audio&aid=0&api=1&gid=0&hash=0831f52f49516064cc4ce9b98fbc935d&mid=62703936&rhash=1b644f4030f359093033f2dca1efab04
body: #<Faraday::CompositeReadIO:0x000000054513c0 @parts=[#<Parts::FilePart:0x00000005451de8 @head="-------------RubyMultipartPost\r\nContent-Disposition: form-data; name=\"audio\"; filename=\"1.mp3\"\r\nContent-Length: 4931272\r\nContent-Type: application/octet-stream\r\nContent-Transfer-Encoding: binary\r\n\r\n", @foot="\r\n", @length=4931472, @io=#<CompositeReadIO:0x00000005451640 @ios=[#<StringIO:0x00000005451730>, #<UploadIO:0x00000005433a78 @content_type="application/octet-stream", @original_filename="1.mp3", @local_path="/var/www/flat.fm/1.mp3", @io=#<File:/var/www/flat.fm/1.mp3>, @opts={}>, #<StringIO:0x00000005451690>], @index=0>>, #<Parts::EpiloguePart:0x00000005451500 @part="-------------RubyMultipartPost--\r\n\r\n", @io=#<StringIO:0x00000005451460>>], @ios=[#<CompositeReadIO:0x00000005451640 @ios=[#<StringIO:0x00000005451730>, #<UploadIO:0x00000005433a78 @content_type="application/octet-stream", @original_filename="1.mp3", @local_path="/var/www/flat.fm/1.mp3", @io=#<File:/var/www/flat.fm/1.mp3>, @opts={}>, #<StringIO:0x00000005451690>], @index=0>, #<StringIO:0x00000005451460>], @index=0>

Ответ:

#<Hashie::Mash audio="%7B%22error%22%3A-2%7D" hash="e1b4451767363d0599fdc913df64c274" redirect="http://vk.com/audio.php?act=done_add&mid=62703936&aid=0&gid=0&server=613726&audio=%7B%22error%22%3A-2%7D&hash=e1b4451767363d0599fdc913df64c274" server=613726>

Сохранение:

save_audio = vk.audio.save(
    server: upload_audio.server, audio: upload_audio.audio, 
    hash: upload_audio['hash'], artist: "1", title: '1'
)

Ответ:

POST https://api.vk.com/method/audio.save?access_token=d...8
body: "artist=1&audio=%257B%2522error%2522%253A-2%257D&hash=e1b4451767363d0599fdc913df64c274&server=613726&title=1"
{"error":{"error_code":301,"error_msg":"Invalid filename","request_params":[{"key":"oauth","value":"1"},{"key":"method","value":"audio.save"},{"key":"artist","value":"1"},{"key":"audio","value":"%7B%22error%22%3A-2%7D"},{"key":"hash","value":"e1b4451767363d0599fdc913df64c274"},{"key":"server","value":"613726"},{"key":"title","value":"1"}]}}
VkontakteApi::Error: VkontakteApi::Error

Ошибка имени файла, оно и понятно %7B%22error%22%3A-2%7D что так быть не должно.
Но вот вопрос: в чём дело?

Пробовал с различными файлами, различных кодеков всевозможных (и lame в том числе), размером от 4 до 125 мегабайт. Причину не могу установть, помогите кто знает в чём проблема, спасибо.

Поддержка двух VK приложений одновременно

Добрый день.

Могу ли я настроить поддержку двух VK App ID одновременно? Сейчас я вижу, что настройки задаются глобально для класса VkontakteApi. Мне это нужно, так как у меня есть два App ID — одно для VK Iframe, другое для Standalone приложения в iOS.

Спасибо.

Непонятная ошибка (Invalid album id)

Вот такой код:

2.0.0p247 :003 > api.photos.get(:gid=>22731510, :aid=>180128624, :extended=>1)
POST https://api.vk.com/method/photos.get?access_token=b832071ec84e01aab0d8cbf0273070985e699436effce3f50dcd88fc930877620765cda606ab8411da7bf
body: "gid=22731510&aid=180128624&extended=1"
POST https://api.vk.com/method/photos.get?access_token=b832071ec84e01aab0d8cbf0273070985e699436effce3f50dcd88fc930877620765cda606ab8411da7bf
body: "ERROR"
{"error":{"error_code":114,"error_msg":"Invalid album id","request_params":[{"key":"oauth","value":"1"},{"key":"method","value":"photos.get"},{"key":"access_token","value":"b832071ec84e01aab0d8cbf0273070985e699436effce3f50dcd88fc930877620765cda606ab8411da7bf"},{"key":"ERROR","value":""}]}}
VkontakteApi::Error: VkontakteApi::Error
        from /home/proton/.rvm/gems/ruby-2.0.0-p247@test/gems/vkontakte_api-1.2/lib/vkontakte_api/result.rb:31:in `extract_result'
        from /home/proton/.rvm/gems/ruby-2.0.0-p247@test/gems/vkontakte_api-1.2/lib/vkontakte_api/result.rb:14:in `process'
        from /home/proton/.rvm/gems/ruby-2.0.0-p247@test/gems/vkontakte_api-1.2/lib/vkontakte_api/method.rb:14:in `call'
        from /home/proton/.rvm/gems/ruby-2.0.0-p247@test/gems/vkontakte_api-1.2/lib/vkontakte_api/resolver.rb:16:in `method_missing'
        from (irb):3
        from /home/proton/.rvm/gems/ruby-2.0.0-p247@test/gems/railties-3.2.15/lib/rails/commands/console.rb:47:in `start'
        from /home/proton/.rvm/gems/ruby-2.0.0-p247@test/gems/railties-3.2.15/lib/rails/commands/console.rb:8:in `start'
        from /home/proton/.rvm/gems/ruby-2.0.0-p247@test/gems/railties-3.2.15/lib/rails/commands.rb:41:in `<top (required)>'
        from script/rails:6:in `require'
        from script/rails:6:in `<main>'
2.0.0p247 :004 > 

При этом иногда всё работает отлично, а иногда - падает, как в примере. Это проблема на стороне vk или в геме?

Прошу добавить вывод в консоле запросов к ВК для POST

Прошу добавить вывод в консоле для POST запросов. Мне кажется это было бы оч. удобно, тем более для GET все нормально работает.

А для POST все параметры после токена обрезаются.

POST https://api.vk.com/method/execute?access_token=g77f8gfg8gr8f8g7g7fgahjklesh97g8ffgg868fg6

Заранее спасибо

Проблемы с photos.save

Вероятно проблемы только у меня, но возможно поможете разобраться?

Пытаюсь загрузить фото в альбом. Список альбомов получаю. Всё проходит нормально (авторизация пользователя, получение ссылки на загрузку, загрузка) до того самого момента как надо вызвать photos.save

us = vk.photos.get_upload_server(aid: 11111111)
=> #<Hashie::Mash ..........>

up = VkontakteApi.upload(url: us.upload_url, file1: ['z:/375.jpg', 'image/jpeg'])
=> #<Hashie::Mash ..........>
photos_list не пустой (видел у многих из-за пустого проблемы возникают)

save = vk.photos.save(aid: up.aid, server: up.server, photos_list: up.photos_list, hash: up.hash, caption: "Test...")
=>VkontakteApi::Error: VkontakteApi::Error
from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/vkontakte_api-1.1/lib/vkontakte_api/result.rb:31:in extract_result' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/vkontakte_api-1.1/lib/vkontakte_api/result.rb:14:inprocess'
from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/vkontakte_api-1.1/lib/vkontakte_api/method.rb:14:in call' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/vkontakte_api-1.1/lib/vkontakte_api/resolver.rb:16:inmethod_missing'

Что это может быть?

PS. Кстати при создании альбома такая же ошибка...

audio.search

Довольно интересная складывается ситуация при вызове этого метода.
Поскольку они оба есть в namespaces.yml, то возвращается VkontakteApi::Namespace, вместо ожидаемого результата.

То же самое и с video.search.
Ошибка появилась в версии 1.2, после добавления "search".
Спасибо!)

scope=email игнорируется

При авторизации есть недокументированная возможность запрашивать емейл пользователя, путём добавления значения email его в scope.

Сейчас емейл урезается (судя по всему тут lib/vkontakte_api/client.rb ) при ответе и возвращается только token, user_id и expires_at.

'users.search' not working

Hi!
The following code execution:

client = ... # authorization
result = client.users.search(search_params)
count = result.first

leads to exception:

VkontakteApi::Error (VKontakte returned an error 3: 'Unknown method passed' after calling method 'search.first' without parameters.):
... some app trace here (skipped)

This caused by last commit ('new namespaces added') - there is 'search' namespace added. So client.users.search.first calls unexisting 'search.first' method. Was it added intentionally? I don't see any 'search.*' at the VK API page.

Faraday::Error::ConnectionFailed

При использовании VkontakteApi.authorize в контроллере вылетает ошибка
Faraday::Error::ConnectionFailed (SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed).
Все делал по инструкции.
Ruby 1.9, Rails 4.0.0

License missing from gemspec

Some companies will only use gems with a certain license.
The canonical and easy way to check is via the gemspec
via e.g.

spec.license = 'MIT'
# or
spec.licenses = ['MIT', 'GPL-2']

There is even a License Finder to help companies ensure all gems they use
meet their licensing needs. This tool depends on license information being available in the gemspec.
Including a license in your gemspec is a good practice, in any case.

How did I find you?

I'm using a script to collect stats on gems, originally looking for download data, but decided to collect licenses too,
and make issues for missing ones as a public service :)
https://gist.github.com/bf4/5952053#file-license_issue-rb-L13 So far it's going pretty well

invalid_grant: Code is invalid or expired.

Сделал все по Вашим докам, но в ответ получаю след. ошибку:

invalid_grant: Code is invalid or expired. {"error":"invalid_grant","error_description":"Code is invalid or expired."}

на вот этой строчке: @VK = VkontakteApi.authorize(code: params[:code])

Method namespace conflict

Hello. I have an issue in v1.2. Adding the "search" method to the namespace.yml list prevent to work methods with a "search" prefix [method_name].search(params).
For example:

   @client.newsfeed.search(q: "hello", count: 1).first

form this query:

DEBUG -- : POST https://api.vk.com/method/newsfeed.first

NoMethodError: undefined method `b' for nil:NilClass

Вот такая вот штука. -((
upload_url = @vk.photos.get_wall_upload_server(group_id: 78348415, access_token: access_token).upload_url
I, [2015-10-10T12:26:22.568994 #26978] INFO -- : {:method=>"photos.getWallUploadServer", :params=>"access_token=c32086257ebe95227dfefd18c378f3992773e035c6606991017178d68a80bba80710d01e3d8fac4472fe1bb971e24&group_id=78348415"}
E, [2015-10-10T12:26:22.797936 #26978] ERROR -- : #<NoMethodError: undefined method b' for nil:NilClass> NoMethodError: undefined method b' for nil:NilClass
from /usr/local/rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/cgi/util.rb:18:inunescape' from /var/www/moscoweveryday.com/vendor/bundle/ruby/2.1.0/bundler/gems/vk-ruby-b8f51956c91b/lib/vk-ruby/middlewares/vk_logger.rb:41:in call'
from /var/www/moscoweveryday.com/vendor/bundle/ruby/2.1.0/gems/faraday-0.9.2/lib/faraday/request/retry.rb:116:incall' from /var/www/moscoweveryday.com/vendor/bundle/ruby/2.1.0/gems/faraday-0.9.2/lib/faraday/request/url_encoded.rb:15:in call'
from /var/www/moscoweveryday.com/vendor/bundle/ruby/2.1.0/gems/faraday-0.9.2/lib/faraday/request/multipart.rb:14:incall' from /var/www/moscoweveryday.com/vendor/bundle/ruby/2.1.0/gems/faraday-0.9.2/lib/faraday/rack_builder.rb:139:in build_response'
from /var/www/moscoweveryday.com/vendor/bundle/ruby/2.1.0/gems/faraday-0.9.2/lib/faraday/connection.rb:377:inrun_request' from /var/www/moscoweveryday.com/vendor/bundle/ruby/2.1.0/gems/faraday-0.9.2/lib/faraday/connection.rb:177:in post'
from /var/www/moscoweveryday.com/vendor/bundle/ruby/2.1.0/gems/vkontakte_api-1.4.2/lib/vkontakte_api/api.rb:18:incall' from /var/www/moscoweveryday.com/vendor/bundle/ruby/2.1.0/gems/vkontakte_api-1.4.2/lib/vkontakte_api/method.rb:13:in call'
from /var/www/moscoweveryday.com/vendor/bundle/ruby/2.1.0/gems/vkontakte_api-1.4.2/lib/vkontakte_api/resolver.rb:20:incall_method' from /var/www/moscoweveryday.com/vendor/bundle/ruby/2.1.0/gems/vkontakte_api-1.4.2/lib/vkontakte_api/namespace.rb:12:in method_missing'
from (irb):7
from /var/www/moscoweveryday.com/vendor/bundle/ruby/2.1.0/gems/railties-4.0.5/lib/rails/commands/console.rb:90:instart' from /var/www/moscoweveryday.com/vendor/bundle/ruby/2.1.0/gems/railties-4.0.5/lib/rails/commands/console.rb:9:in start'
from /var/www/moscoweveryday.com/vendor/bundle/ruby/2.1.0/gems/railties-4.0.5/lib/rails/commands.rb:62:in<top (required)>' from bin/rails:4:in require'
from bin/rails:4:in`

'2.1.0 :008 >

Invalid hash' after calling method 'photos.saveWallPhoto

Пытаюсь загрузить фото на стену группы

us = app.photos.get_wall_upload_server(gid: 53285720)
up = VkontakteApi.upload(url: us.upload_url, file1: ['quetzal.jpg', 'image/jpeg'])
save = app.photos.save_wall_photo(up)

На save_wall_photo ловлю ошибку

VKontakte returned an error 121: 'Invalid hash' after calling method 'photos.saveWallPhoto' with parameters {"server"=>"323530", "photo"=>"[{\"photo\":\"92404378b6:x\",\"sizes\":[[\"s\",\"323530165\",\"68fd\",\"s4sK_5tIHgE\",67,75],[\"m\",\"323530165\",\"68fe\",\"uVeQeZnIuI8\",116,130],[\"x\",\"323530165\",\"68ff\",\"NIaCeLJVK2g\",540,604],[\"o\",\"323530165\",\"6900\",\"yTYAtgnvOrM\",130,145],[\"p\",\"323530165\",\"6901\",\"RCGA3ZJD2lo\",200,224],[\"q\",\"323530165\",\"6902\",\"m28tR-Zv0kM\",320,358],[\"r\",\"323530165\",\"6903\",\"twGnd3KvNPs\",510,570]],\"kid\":\"9ff2190c02218d9283e776b0496d7b67\"}]", "hash"=>"5d43c84fbf54b52ba6435d318061d875"}.

Можно конечно сохранять фотографии в какой нибудь альбом а потом аттачментом отправлять на стену, но это не то.

Ошибка в logger.rb

Иногда при частой отправке запросов в ВК встречал следующую ошибку

Запрос был: @vk.wall.get({owner_id: 26515827, count: 1, filter: [:owner]})
ruby 2.1.5p273 (2014-11-13 revision 48405) [i686-linux]

WARN: undefined method error?' for nil:NilClass WARN: ruby/2.1.0/bundler/gems/vkontakte_api-1287b4f90216/lib/vkontakte_api/logger.rb:27:inon_complete'
ruby/2.1.0/gems/faraday-0.9.0/lib/faraday/response.rb:9:in block in call' ruby/2.1.0/gems/faraday-0.9.0/lib/faraday/response.rb:57:inon_complete'
ruby/2.1.0/gems/faraday-0.9.0/lib/faraday/response.rb:8:in call' ruby/2.1.0/bundler/gems/vkontakte_api-1287b4f90216/lib/vkontakte_api/logger.rb:21:incall'
ruby/2.1.0/gems/faraday-0.9.0/lib/faraday/request/retry.rb:87:in call' ruby/2.1.0/gems/faraday-0.9.0/lib/faraday/request/url_encoded.rb:15:incall'
ruby/2.1.0/gems/faraday-0.9.0/lib/faraday/request/multipart.rb:14:in call' ruby/2.1.0/gems/faraday-0.9.0/lib/faraday/rack_builder.rb:139:inbuild_response'
ruby/2.1.0/gems/faraday-0.9.0/lib/faraday/connection.rb:377:in run_request' ruby/2.1.0/gems/faraday-0.9.0/lib/faraday/connection.rb:177:inpost'
ruby/2.1.0/bundler/gems/vkontakte_api-1287b4f90216/lib/vkontakte_api/api.rb:18:in call' ruby/2.1.0/bundler/gems/vkontakte_api-1287b4f90216/lib/vkontakte_api/method.rb:13:incall'
ruby/2.1.0/bundler/gems/vkontakte_api-1287b4f90216/lib/vkontakte_api/resolver.rb:20:in call_method' ruby/2.1.0/bundler/gems/vkontakte_api-1287b4f90216/lib/vkontakte_api/namespace.rb:12:inmethod_missing'

При повторной отправке этого же запроса, ошибок нет.

Faraday's `method_missing`: undefined method `register_middleware`

While trying to use this gem have an Faraday's error:

user@user_pc:~/path_to_project$ ruby vkapi.rb/home/user/.rvm/gems/ruby-2.1.0@vkapi/gems/faraday-0.9.0.rc7/lib/faraday.rb:99:in `method_missing': undefined method `register_middleware' for #<Faraday::Connection:0x00000002288eb0> (NoMethodError)
    from /home/user/.rvm/gems/ruby-2.1.0@vkapi/gems/faraday_middleware-parse_oj-0.2.1/lib/faraday_middleware/parse_oj.rb:15:in `<top (required)>'
    from /home/user/.rvm/rubies/ruby-2.1.0/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /home/user/.rvm/rubies/ruby-2.1.0/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /home/user/.rvm/gems/ruby-2.1.0@vkapi/gems/vkontakte_api-1.3.1/lib/vkontakte_api.rb:3:in `<top (required)>'
    from /home/user/.rvm/rubies/ruby-2.1.0/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:135:in `require'
    from /home/user/.rvm/rubies/ruby-2.1.0/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:135:in `rescue in require'
    from /home/user/.rvm/rubies/ruby-2.1.0/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:144:in `require'
    from vkapi.rb:1:in `<main>'

Could somebody help with this issue?

friends.get и авторизация через OmniAuth

Привет,

Я использую авторизацию через OmniAuth + Devise, пользователь успешно авторизуется, получая access_token вида:

{
       "provider" => "vkontakte",
            "uid" => 11111,
           "info" => {
              "name" => "Иван Петров",
          "nickname" => "лолка",
        "first_name" => "Иван",
         "last_name" => "Петров",
             "image" => "http://cs9641.userapi.com/u11111/e_204f2538.jpg",
          "location" => "Russia, ",
              "urls" => {
            "Vkontakte" => "http://vk.com/asdf"
        }
    },
    "credentials" => {
             "token" => "2e1263aa122aae2342e112886050242c802dfaee759655574f21021920294a88c5010b3db02b62afc42",
        "expires_at" => 1359197000,
           "expires" => true
    },
          "extra" => {
        "raw_info" => {
                    "uid" => 11111,
             "first_name" => "Иван",
              "last_name" => "Петров",
               "nickname" => "лолка",
            "screen_name" => "asdf",
                    "sex" => 2,
                   "city" => "0",
                "country" => "1",
                 "online" => 0,
                  "photo" => "http://cs9641.userapi.com/u11111/e_204f2538.jpg",
              "photo_big" => "http://cs9641.userapi.com/u11111/a_748e6381.jpg"
        }
    }
}

После чего создаю клиент для ВК, передавая этот токен:

@vk = VkontakteApi::Client.new(access_token)

При попытке получить список друзей

@friends = @vk.friends.get(fields: [:first_name, :last_name, :screen_name])

Получаю ошибку

VKontakte returned an error 113: 'Invalid user id' after calling method 'friends.get' with parameters {"fields"=>"first_name,last_name,screen_name"}.

Понятно, что не передается uid. Если передать его вот так

@friends = @vk.friends.get(uid: current_user.uid, fields: [:first_name, :last_name, :screen_name])

То получаю ошибку

VKontakte returned an error 7: 'Permission to perform this action is denied' after calling method 'friends.get' with parameters {"uid"=>"13610681", "fields"=>"first_name,last_name,screen_name"}.

В настройках приложения запрашиваю через scope права на 'friends'. Согласно VK API uid параметр вообще не обязателен (тогда будет список друзей авторизованного юзера). Мне кажется, какая-то проблема с access_token при инициализации клиента.... Подскажите, как исправить?

Как указать версию VK API?

Как указать версию VK API?
а то используется старая версия по умолчанию, хотелось бы 5.16 установить для всех методов а то каждый раз передавать v: 5.16 не круто

Метод send

vk.messages.send(message: 'message')

Выдаёт

TypeError: {:message=>"message"} is not a symbol

Так понимаю, что проблема в том, что вызывается стандартный метод send, а не метод 'send' из api vkontakte

Прошу подсказать простой хак)

OJ JSON Parsing Error

Проблема с парсингом JSON, когда встречаются подобные названия в группах - ^it is MerRiLy^

Вот список gid таких групп

27590266
27590308
30731395
40720500
25636833
21162495
6424028
5264005
27593445

https://api.vk.com/method/groups.getById?gids=27590308&fields=members_count

{
"response": [
{
"gid": 27590308,
"name": "^it is MerRiLy^",
"screen_name": "club27590308",
"is_closed": 0,
"type": "page",
"photo": "http://cs9622.vk.me/g27590308/e_5e8febcb.jpg",
"photo_medium": "http://cs9622.vk.me/g27590308/d_f03b4da2.jpg",
"photo_big": "http://cs9622.vk.me/g27590308/a_45b896f7.jpg"
}
]
}

Через гем

@vk.groups.getById(gid: 27590308)


Faraday::Error::ParsingError: Not a valid ID number at line 1, column 54 [load.c:225]

    from /Users/x/.rbenv/versions/1.9.3-p125/lib/ruby/gems/1.9.1/gems/faraday_middleware-parse_oj-0.1/lib/faraday_middleware/parse_oj.rb:8:in `load'
    from /Users/x/.rbenv/versions/1.9.3-p125/lib/ruby/gems/1.9.1/gems/faraday_middleware-parse_oj-0.1/lib/faraday_middleware/parse_oj.rb:8:in `block in <class:ParseOj>'
    from /Users/x/.rbenv/versions/1.9.3-p125/lib/ruby/gems/1.9.1/gems/faraday_middleware-0.9.0/lib/faraday_middleware/response_middleware.rb:48:in `call'
    from /Users/x/.rbenv/versions/1.9.3-p125/lib/ruby/gems/1.9.1/gems/faraday_middleware-0.9.0/lib/faraday_middleware/response_middleware.rb:48:in `parse'
    from /Users/x/.rbenv/versions/1.9.3-p125/lib/ruby/gems/1.9.1/gems/faraday_middleware-0.9.0/lib/faraday_middleware/response_middleware.rb:39:in `process_response'
    from /Users/x/.rbenv/versions/1.9.3-p125/lib/ruby/gems/1.9.1/gems/faraday_middleware-0.9.0/lib/faraday_middleware/response_middleware.rb:32:in `block in call'
    from /Users/x/.rbenv/versions/1.9.3-p125/lib/ruby/gems/1.9.1/gems/faraday-0.8.6/lib/faraday/response.rb:63:in `on_complete'
    from /Users/x/.rbenv/versions/1.9.3-p125/lib/ruby/gems/1.9.1/gems/faraday_middleware-0.9.0/lib/faraday_middleware/response_middleware.rb:30:in `call'
    from /Users/x/.rbenv/versions/1.9.3-p125/lib/ruby/gems/1.9.1/gems/faraday-0.8.6/lib/faraday/response.rb:8:in `call'
    from /Users/x/.rbenv/versions/1.9.3-p125/lib/ruby/gems/1.9.1/gems/faraday-0.8.6/lib/faraday/response.rb:8:in `call'
    from /Users/x/.rbenv/versions/1.9.3-p125/lib/ruby/gems/1.9.1/gems/vkontakte_api-1.1/lib/vkontakte_api/logger.rb:21:in `call'
    from /Users/x/.rbenv/versions/1.9.3-p125/lib/ruby/gems/1.9.1/gems/faraday-0.8.6/lib/faraday/request/url_encoded.rb:14:in `call'
    from /Users/x/.rbenv/versions/1.9.3-p125/lib/ruby/gems/1.9.1/gems/faraday-0.8.6/lib/faraday/request/multipart.rb:13:in `call'
    from /Users/x/.rbenv/versions/1.9.3-p125/lib/ruby/gems/1.9.1/gems/faraday_middleware-0.9.0/lib/faraday_middleware/request/oauth2.rb:40:in `call'
    from /Users/x/.rbenv/versions/1.9.3-p125/lib/ruby/gems/1.9.1/gems/faraday-0.8.6/lib/faraday/connection.rb:247:in `run_request'
    from /Users/x/.rbenv/versions/1.9.3-p125/lib/ruby/gems/1.9.1/gems/faraday-0.8.6/lib/faraday/connection.rb:112:in `post'
    from /Users/x/.rbenv/versions/1.9.3-p125/lib/ruby/gems/1.9.1/gems/vkontakte_api-1.1/lib/vkontakte_api/api.rb:17:in `call'
    from /Users/x/.rbenv/versions/1.9.3-p125/lib/ruby/gems/1.9.1/gems/vkontakte_api-1.1/lib/vkontakte_api/method.rb:13:in `call'
    from /Users/x/.rbenv/versions/1.9.3-p125/lib/ruby/gems/1.9.1/gems/vkontakte_api-1.1/lib/vkontakte_api/resolver.rb:16:in `method_missing'
    from (irb):22
    from /Users/x/.rbenv/versions/1.9.3-p125/bin/irb:12:in `<main>'irb(main):023:0>

Dynamic method calling

В 1.2 отвалился динамический вызов методов:

2.0.0p247 :049 > vk.photos
 => #<VkontakteApi::Namespace:0x000000091339c8 @name="photos", @previous_resolver=#<Hashie::Mash name=nil token="728de16c8494909187a16487c550e58e802b70c176278ffefb201c132f533a330e718296d572f511e2e8b">> 
2.0.0p247 :050 > vk.send('photos')
NoMethodError: undefined method `inject' for "photos":String
        from /home/proton/.rvm/gems/ruby-2.0.0-p247/gems/vkontakte_api-1.2/lib/vkontakte_api/utils.rb:9:in `flatten_arguments'
        from /home/proton/.rvm/gems/ruby-2.0.0-p247/gems/vkontakte_api-1.2/lib/vkontakte_api/api.rb:16:in `call'
        from /home/proton/.rvm/gems/ruby-2.0.0-p247/gems/vkontakte_api-1.2/lib/vkontakte_api/method.rb:13:in `call'
        from /home/proton/.rvm/gems/ruby-2.0.0-p247/gems/vkontakte_api-1.2/lib/vkontakte_api/resolver.rb:16:in `method_missing'
        from (irb):50
        from /home/proton/.rvm/gems/ruby-2.0.0-p247/gems/railties-3.2.14/lib/rails/commands/console.rb:47:in `start'
        from /home/proton/.rvm/gems/ruby-2.0.0-p247/gems/railties-3.2.14/lib/rails/commands/console.rb:8:in `start'
        from /home/proton/.rvm/gems/ruby-2.0.0-p247/gems/railties-3.2.14/lib/rails/commands.rb:41:in `<top (required)>'
        from script/rails:6:in `require'
        from script/rails:6:in `<main>'

В 1.1 это работало

Сейчас временно заменил send на method_missing

NoMethodError, когда VK валится с HTTP 5XX

Время от времени VK отвечает кодом 5XX и валится весь код вообще, потому что ответ пустой и env[:body] == nil, что вызывает ошибку, когда в коде происходят вызовы вроде env[:body].error?. Боюсь лезть и исправлять что-то, так как не умею и не знаю точно всех мест, где еще могут быть подобные ошибки.

POST http method

Как с помощью гема можно сделать POST запрос к API VK?
Насколько я понимаю есть только GET запросы. Никаких опций нет.

Тогда как POST запросы очень полезны, есть ситуации при которых запрос не убирается в ограничения GET запроса на длину URL.

Лучше все запросы делать POST по умолчанию.

Upgrade faraday version

I can't use the gem together with koala

Bundler could not find compatible versions for gem "faraday":
  In Gemfile:
    vkontakte_api (~> 1.3) ruby depends on
      faraday (< 0.9, >= 0.7.4) ruby

    koala (~> 1.8.0rc1) ruby depends on
      faraday (0.9.0)

Error handling

Привет, столкнулся с необходимостью обрабатывать ответы от api.vk.com, даже если они они вернули ошибку. В иделае хотелось бы иметь возможность всегда получить данные которые возвращает api.vk.com в независимости от того каким был ответ.

Set API version for all requests

Насколько я понял из документации для использования определённой версии API ко всем запросам нужно добавлять номер версии (?v=5.3).

Можно ли как-то это автоматизировать (чтобы где-то в начале задать параметр, а он автоматически бы добавлялся ко всем запросам)?

Клиентские токены больше не работают

С 6 июня VK проверяет IP адрес при запросах с указанием токена, полученного извне (например, через клиенский OAuth или тот, что передаётся в IFrame).

Возвращается ошибка: "error_code":5,"error_msg":"User authorization failed: access_token was given to another ip address."

Нужно либо добавить возможность передать заголовок с пользовательским IP, либо поддержать этот метод: https://vk.com/pages?oid=-1&p=%D0%92%D0%B7%D0%B0%D0%B8%D0%BC%D0%BE%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D0%B5_%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81_API

Dependencies conflict with omniauth oauth2-0.9.3

Bundler could not find compatible versions for gem "faraday":

  In Gemfile:
    vkontakte_api (~> 1.3) ruby depends on
      faraday (< 0.9, >= 0.7.4) ruby

    vkontakte_api (~> 1.3) ruby depends on
      faraday (0.9.0)
gem 'omniauth'
gem 'omniauth-github'
gem 'omniauth-twitter'
gem 'omniauth-google-oauth2'
gem 'omniauth-facebook'
gem 'omniauth-vkontakte'
gem 'omniauth-odnoklassniki'
gem 'vkontakte_api'
Using oauth (0.4.7)
Using oauth2 (0.9.3)
Using omniauth (1.2.1)
Using omniauth-oauth2 (1.1.2)
Using omniauth-facebook (1.6.0)
Using omniauth-github (1.1.1)
Using omniauth-google-oauth2 (0.2.2)
Using omniauth-oauth (1.0.1)
Using omniauth-odnoklassniki (0.0.4)
Using omniauth-twitter (1.0.1)
Using omniauth-vkontakte (1.3.2)

Unknown method passed Загрузка файлов

При попытке загрузки файла
@vk.upload(url: upload_url, photo: [file_path, 'image/jpeg'])

VKontakte returned an error 3: 'Unknown method passed' after calling method 'upload' with parameters {"photo"=>"././public/images/79101.jpg,image/jpeg", "url"=>"http://cs625324.vk.com/upload.php?act=do_add&amp;mid=123092886&amp;aid=-14&amp;gid=-101666480&amp;hash=bc00851a9c3a57770622c6d94ed044fa&amp;rhash=ccb4c6b8600439c8c7ec684d8553c9a2&amp;swfupload=1&amp;api=1&amp;wallphoto=1"}.

Feature request: request timeout option

Клиент может огромное время ждать ответ на запрос, хотелось бы иметь возможность установить таймаут. В Faraday давно убрали возможность передать некоторые параметры при инициализации соединения (они оставили что-то похожее, но в любом случае провернуть это с данным клиентом не получается), так что единственный верный способ сейчас установить таймауты — это в блоке инициализации соединения.

Загрузка файлов (Hashie::Mash errcode=1 height=65 width=90)

Пытаюсь загрузить изображение:
VkontakteApi.upload(url: url_for_upload, photo: ['/path/to/image.jpg', 'image/jpeg'])

url_for_upload - получен через метод ads.getUploadURL (ad_format: 1)

получаю ответ от Вк:
Hashie::Mash errcode=1 height=65 width=90
но изображение именно нужного размера (90х65)

Help with secure methods

Not a bug, just wondering if you can help me understand vk's documentation. I'm trying to use some of the sms methods located at http://vk.com/developers.php?oid=-17680044&p=secure.sendSMSNotification

VkontakteApi::Client.new(vk_token).secure.getSMS(uid: 41526347)
VkontakteApi::Error: VKontakte returned an error 5: 'User authorization failed: you should pass client_secret param to use secure methods' after calling method 'secure.getSMS' with parameters {"uid"=>"41526347"}.

i have my app secret in config, but it's still throwing an error. Any suggestions?

VkontakteApi.configure do |config|
  # Authorization parameters (not needed when using an external authorization):
  config.app_id       = 'blah'
  config.app_secret   = 'blahblah'
end

Accessing API as app server

I've trying to execute VK Api methods without user.
So, I get an access token and all works fine.
But when I try to execute one of the methods(users.get or wall.get), I get an error.
Here is example:

1.9.3p125 :001 > token=VkWrapper.get_token
=> "d7ff51c9d7ff51c9d74d0f9364d7cb5f05dd7ffd7ff51c986e0d797d70740239e08994e"
1.9.3p125 :002 > vk = VkontakteApi::Client.new(token)
=> #<VkontakteApi::Client:0x00000002dc1818 @token="d7ff51c9d7ff51c9d74d0f9364d7cb5f05dd7ffd7ff51c986e0d797d70740239e08994e">
1.9.3p125 :003 > user = vk.users.get(uid: '6113239').first
VkontakteApi::Error: VkontakteApi::Error
from /home/alex/.rvm/gems/ruby-1.9.3-p125/gems/vkontakte_api-1.1/lib/vkontakte_api/result.rb:31:in extract_result' from /home/alex/.rvm/gems/ruby-1.9.3-p125/gems/vkontakte_api-1.1/lib/vkontakte_api/result.rb:14:inprocess'
from /home/alex/.rvm/gems/ruby-1.9.3-p125/gems/vkontakte_api-1.1/lib/vkontakte_api/method.rb:14:in call' from /home/alex/.rvm/gems/ruby-1.9.3-p125/gems/vkontakte_api-1.1/lib/vkontakte_api/resolver.rb:16:inmethod_missing'
from (irb):3
from /home/alex/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.11/lib/rails/commands/console.rb:47:in start' from /home/alex/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.11/lib/rails/commands/console.rb:8:instart'
from /home/alex/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.11/lib/rails/commands.rb:41:in <top (required)>' from script/rails:6:inrequire'
from script/rails:6:in `

'

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.