7even / vkontakte_api Goto Github PK
View Code? Open in Web Editor NEWRuby-адаптер для ВКонтакте API
Home Page: http://7even.github.com/vkontakte_api
License: MIT License
Ruby-адаптер для ВКонтакте API
Home Page: http://7even.github.com/vkontakte_api
License: MIT License
Делаем запрос @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 не на руби писали =)
wall.get(filter: 'others') должен возвращать записи других пользователей на стене.
Демо приложение запросило права на доступ, и после этого выдало ошибку:
We're sorry, but something went wrong.
Периодически при работе с Вконтакте возникают разные ошибки:
Проблемы с сетью (аля getaddrinfo: Name or service not known (SocketError))
Превышение лимита api (Too many requests per second)
И т.д.
Хотелось бы в данном случае избегать падения, а ждать пару секунд и повторять запрос (Ну и падать, если после пары попыток возникает ошибка).
Хотел спросить совета, как это лучше организовать, в голову хороших решений не лезет.
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.
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 браузер."
У ВК немного поменялись правила авторизации, точнее стали проверять наличие redirect_uri в запросе на токен, раньше не просили.
Вот доказательства,
http://vk.com/topic-1_21972169?post=52899
http://xsave.ru/topic-1_21972158?post=52679
Причем все хитро у них для старых приложений (правда не всегда) остается совместимость.
На новых без redirect_uri работать не будет.
Доброго дня.
Есть ли опыт загрузки аудиофайлов на сервер?
Я делаю так:
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 мегабайт. Причину не могу установть, помогите кто знает в чём проблема, спасибо.
What about 'crack' gem?
https://github.com/jnunemaker/crack/blob/master/lib/crack/json.rb
It parse VK's json too, and plain ruby.
Добрый день.
Могу ли я настроить поддержку двух VK App ID одновременно? Сейчас я вижу, что настройки задаются глобально для класса VkontakteApi
. Мне это нужно, так как у меня есть два App ID — одно для VK Iframe, другое для Standalone приложения в iOS.
Спасибо.
Возможно ли? Что передавать в VkontakteApi.upload в параметре photo
? Обычный урл не подходит http://s3.eu-central-1.amazonaws.com/example/photos/images/000/876/114/original/667f423c66.jpg
Вот такой код:
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 запросов. Мне кажется это было бы оч. удобно, тем более для GET все нормально работает.
А для POST все параметры после токена обрезаются.
POST https://api.vk.com/method/execute?access_token=g77f8gfg8gr8f8g7g7fgahjklesh97g8ffgg868fg6
Заранее спасибо
Вероятно проблемы только у меня, но возможно поможете разобраться?
Пытаюсь загрузить фото в альбом. Список альбомов получаю. Всё проходит нормально (авторизация пользователя, получение ссылки на загрузку, загрузка) до того самого момента как надо вызвать 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:in
process'
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:in
method_missing'
Что это может быть?
PS. Кстати при создании альбома такая же ошибка...
Не могу получить ленту новостей. Авторизация проходит с такими правами scope: [:friends, :photos, :groups, :offline, :notify]. Пробовал vkontakte-on-rails.herokuapp.com, но он тоже перестал работать....
Довольно интересная складывается ситуация при вызове этого метода.
Поскольку они оба есть в namespaces.yml, то возвращается VkontakteApi::Namespace, вместо ожидаемого результата.
То же самое и с video.search.
Ошибка появилась в версии 1.2, после добавления "search".
Спасибо!)
При авторизации есть недокументированная возможность запрашивать емейл пользователя, путём добавления значения email его в scope.
Сейчас емейл урезается (судя по всему тут lib/vkontakte_api/client.rb ) при ответе и возвращается только token, user_id и expires_at.
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.
Новая ссылка на список прав приложений
https://vk.com/dev/permissions
При использовании 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
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. {"error":"invalid_grant","error_description":"Code is invalid or expired."}
на вот этой строчке: @VK = VkontakteApi.authorize(code: params[:code])
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
Вот такая вот штука. -((
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`
Пытаюсь загрузить фото на стену группы
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"}.
Можно конечно сохранять фотографии в какой нибудь альбом а потом аттачментом отправлять на стену, но это не то.
Иногда при частой отправке запросов в ВК встречал следующую ошибку
Запрос был: @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:in
on_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:in
on_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:in
call'
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:in
call'
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:in
build_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:in
post'
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:in
call'
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:in
method_missing'
При повторной отправке этого же запроса, ошибок нет.
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?
Привет,
Я использую авторизацию через 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?
а то используется старая версия по умолчанию, хотелось бы 5.16 установить для всех методов а то каждый раз передавать v: 5.16 не круто
vk.messages.send(message: 'message')
Выдаёт
TypeError: {:message=>"message"} is not a symbol
Так понимаю, что проблема в том, что вызывается стандартный метод send, а не метод 'send' из api vkontakte
Прошу подсказать простой хак)
Проблема с парсингом 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>
В 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
Время от времени VK отвечает кодом 5XX и валится весь код вообще, потому что ответ пустой и env[:body] == nil
, что вызывает ошибку, когда в коде происходят вызовы вроде env[:body].error?
. Боюсь лезть и исправлять что-то, так как не умею и не знаю точно всех мест, где еще могут быть подобные ошибки.
Как с помощью гема можно сделать POST запрос к API VK?
Насколько я понимаю есть только GET запросы. Никаких опций нет.
Тогда как POST запросы очень полезны, есть ситуации при которых запрос не убирается в ограничения GET запроса на длину URL.
Лучше все запросы делать POST по умолчанию.
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)
Привет, столкнулся с необходимостью обрабатывать ответы от api.vk.com, даже если они они вернули ошибку. В иделае хотелось бы иметь возможность всегда получить данные которые возвращает api.vk.com в независимости от того каким был ответ.
Насколько я понял из документации для использования определённой версии 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
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)
AFAIK audio.search format changed https://vk.com/dev/audio.search so now this method doesn't work.
It just returns VkontakteApi::Namespace
При попытке загрузки файла
@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&mid=123092886&aid=-14&gid=-101666480&hash=bc00851a9c3a57770622c6d94ed044fa&rhash=ccb4c6b8600439c8c7ec684d8553c9a2&swfupload=1&api=1&wallphoto=1"}.
Клиент может огромное время ждать ответ на запрос, хотелось бы иметь возможность установить таймаут. В Faraday давно убрали возможность передать некоторые параметры при инициализации соединения (они оставили что-то похожее, но в любом случае провернуть это с данным клиентом не получается), так что единственный верный способ сейчас установить таймауты — это в блоке инициализации соединения.
Пытаюсь загрузить изображение:
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)
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
Как обновить токен доступа для уже созданного объекта?
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:in
process'
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:in
method_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:in
start'
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:in
require'
from script/rails:6:in `
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.