Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/26: Рейтинг темы: голосов - 26, средняя оценка - 4.77
1 / 1 / 1
Регистрация: 13.03.2012
Сообщений: 426

QT VK API

20.12.2014, 20:21. Показов 4862. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер.
Народ вот получилось у меня все с автаризацией, теперь пытаюсь загрузить список друзьей, хотя бы id их но выдает такую ошибку, вроде компелиться нормально все.
"{"error":{"error_code":113,"error_msg": "Invalid user id","request_params":[{"key":"oauth","value":"1"},{"key":"meth od","value":"friends.get"}]}}"

вот код:
widget.h
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#ifndef WIDGET_H
#define WIDGET_H
 
#include <QWidget>
#include <QUrl>
#include <QString>
#include <QUrlQuery>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QTimer>
#include <QEventLoop>
 
 
namespace Ui {
class Widget;
}
 
class Widget : public QWidget
{
    Q_OBJECT
 
public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();
signals:
    void auth_success();
 
private:
    Ui::Widget *ui;
QString token;
QString user_id;
 
public slots:
QByteArray GET(QUrl r);
    void check_url(QUrl url); //принимает урл текущей страницы
   void get_friends();
};
 
#endif // WIDGET_H
widget.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include "widget.h"
#include <QLabel>
#include<QUrl>
#include <QDebug>
#include "ui_widget.h"
#include <QUrlQuery>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    ui->webwin->load(QUrl("https://oauth.vk.com/authorize?client_id=4641003&scope=offline,messages,friends&redirect_uri=https://oauth.vk.com/blank.html&display=wap&response_type=token"));
    ui->label->clear();
    connect(ui->webwin, SIGNAL(urlChanged(QUrl)),this,SLOT(check_url(QUrl))); //соеденяем сигнал браузера с слотом проверки урл,чтобы сигналило при изминения
    connect(this, SIGNAL(auth_success()),this,SLOT(get_friends()));
}
Widget::~Widget()
{
    delete ui;
}
 
QByteArray Widget::GET(QUrl r)
{
    QNetworkAccessManager* manager =new QNetworkAccessManager(this);
    QNetworkReply* reply = manager->get(QNetworkRequest (r));
    QEventLoop wait; // ждем ответа от сервера
    connect(manager, SIGNAL(finished(QNetworkReply*)),&wait, SLOT(quit())); //соеденяем сигнал менеджера сослотом лупа
    QTimer:: singleShot(10000, &wait,SLOT(quit())); // ждем еще 10 сек ответа
    wait.exec();
    QByteArray answer = reply->readAll(); // выщитываем ответ
    reply->deleteLater();
    return answer;
}
void Widget::check_url(QUrl url)
{
   url = url.toString().replace("#", "?");    //меняем # на ? из за того что ВК не отправляет нам запрос с ?, а нам нужен ? а не #
     token=QUrlQuery(url).queryItemValue("access_token"); // в токен пишет значения параметра access token, если его нету, то остаеться пустым
    if(token.isEmpty())
        return;
    ui->label->setText("Success! Token: " + token);
    emit auth_success();
}
 
void Widget::get_friends()
{
    QUrl current("https://api.vk.com/method/friends.get");
   QUrlQuery Param;
    Param.addQueryItem("access_token",token);
    Param.addQueryItem("v","5.2");
    QByteArray answer = GET(current);
    qDebug() << answer;
    //ui->label->setText(answer);
}
в main все стандартно, нечего не менял.
.pro
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#-------------------------------------------------
#
# Project created by QtCreator 2014-12-19T19:23:00
#
#-------------------------------------------------
 
QT       += core gui network webkitwidgets
 
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
 
TARGET = VkApi
TEMPLATE = app
 
 
 
SOURCES += main.cpp\
        widget.cpp
 
HEADERS  += widget.h
 
FORMS    += widget.ui
Заранее Спасибо
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.12.2014, 20:21
Ответы с готовыми решениями:

Steam API - как можно получить медиану цен через API?
Ребят, как можно получить медиану цен через API ? Интересует количество продаж за последний день. Инфу по предмету получаю таким...

Android SDK Manager не отображает платформы 2.3.3 (API 10), 2.3.1 (API 9). Как быть?
Добрый день! Использую Android Studio под Windows 7. Из-за несовместимости с операционной системой Android SDK Manager не отображает...

Android Studio не дает работать с API 8 без установленного API 21
Удалил все не интересующие меня библиотеки и поставил только API Level 8. Но при создании приложения вылезает куча ошибок таких как: Что...

18
187 / 172 / 38
Регистрация: 03.08.2012
Сообщений: 596
20.12.2014, 21:17
Лучший ответ Сообщение было отмечено Семан как решение

Решение

Цитата Сообщение от Семан Посмотреть сообщение
C++ (Qt)
1
2
3
4
5
QUrl current("https://api.vk.com/method/friends.get");
QUrlQuery Param;
Param.addQueryItem("access_token",token);
Param.addQueryItem("v","5.2");
QByteArray answer = GET(current);
Кажется вы забыли сказать current'у, что ему нужно добавить Param
current.setQuery(Param);
1
1 / 1 / 1
Регистрация: 13.03.2012
Сообщений: 426
20.12.2014, 21:22  [ТС]
Цитата Сообщение от Flassie Посмотреть сообщение
Кажется вы забыли сказать current'у, что ему нужно добавить Param
current.setQuery(Param);
тоже самое(
0
 Аватар для MastAKK
148 / 139 / 18
Регистрация: 13.10.2012
Сообщений: 592
21.12.2014, 02:09
Лучший ответ Сообщение было отмечено Семан как решение

Решение

Сделайте как сказано выше и выведите current.toString() в qDebug()
Посмотрите, какой получился адрес.
1
1 / 1 / 1
Регистрация: 13.03.2012
Сообщений: 426
21.12.2014, 02:53  [ТС]
Цитата Сообщение от MastAKK Посмотреть сообщение
Сделайте как сказано выше и выведите current.toString() в qDebug()
Посмотрите, какой получился адрес.
выводит это - https://api.vk.com/method/friends.get, но надо чтобы вывело id друзьей
0
 Аватар для MastAKK
148 / 139 / 18
Регистрация: 13.10.2012
Сообщений: 592
21.12.2014, 02:57
Семан, а что этот вывод означает? Правильно, в url нету необходимых параметров. Код функции на данный момент в студию.
0
1 / 1 / 1
Регистрация: 13.03.2012
Сообщений: 426
21.12.2014, 03:05  [ТС]
Цитата Сообщение от MastAKK Посмотреть сообщение
Семан, а что этот вывод означает? Правильно, в url нету необходимых параметров. Код функции на данный момент в студию.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
void Widget::get_friends()
{
    QUrl current("https://api.vk.com/method/friends.get");
   QUrlQuery Param;
 
    Param.addQueryItem("access_token",token);
    Param.addQueryItem("v","5.2");
    Param.addQueryItem("count","20");
    QByteArray answer = GET(current);
      current.setQuery(Param);
    qDebug() << current.toString();
 
}
0
 Аватар для MastAKK
148 / 139 / 18
Регистрация: 13.10.2012
Сообщений: 592
21.12.2014, 03:12
Кхм...
current.setQuery() должен быть до отправки запроса.
0
1 / 1 / 1
Регистрация: 13.03.2012
Сообщений: 426
21.12.2014, 03:16  [ТС]
Цитата Сообщение от MastAKK Посмотреть сообщение
Кхм...
current.setQuery() должен быть до отправки запроса.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Widget::get_friends()
{
 
    QUrl current("https://api.vk.com/method/friends.get");
   QUrlQuery Param;
    current.setQuery(Param);
    Param.addQueryItem("access_token",token);
    Param.addQueryItem("v","5.2");
    Param.addQueryItem("user_id","17642250");
    QByteArray answer = GET(current);
 
    qDebug() << current.toString();
 
}
Так?
0
 Аватар для MastAKK
148 / 139 / 18
Регистрация: 13.10.2012
Сообщений: 592
21.12.2014, 03:19
Лучший ответ Сообщение было отмечено Семан как решение

Решение

Снова мимо. Между addQueryItem и GET
1
1 / 1 / 1
Регистрация: 13.03.2012
Сообщений: 426
21.12.2014, 03:28  [ТС]
Цитата Сообщение от MastAKK Посмотреть сообщение
Снова мимо. Между addQueryItem и GET
сделал, и как теперь вывести id друзей?

Добавлено через 6 минут
сделал запрос, получил ответ, тот который должен был, но я ожидал получить именно список id а не количество друзей, что не то значит делаю
0
 Аватар для MastAKK
148 / 139 / 18
Регистрация: 13.10.2012
Сообщений: 592
21.12.2014, 03:35
Семан, friends.get возвращает JSon документ (вроде).
В нём 2 элемента: count и items. Собственно, id лежат в массиве items и их там count.
0
1 / 1 / 1
Регистрация: 13.03.2012
Сообщений: 426
21.12.2014, 03:38  [ТС]
Цитата Сообщение от MastAKK Посмотреть сообщение
Семан, friends.get возвращает JSon документ (вроде).
В нём 2 элемента: count и items. Собственно, id лежат в массиве items и их там count.
есть идеи как можно получить элементы этого массива, раньше выводило значит список Id щас в массиве выводит
0
 Аватар для MastAKK
148 / 139 / 18
Регистрация: 13.10.2012
Сообщений: 592
21.12.2014, 03:40
Семан, покажите, что получаете в ответ на запрос.
Я пропаду до завтрашнего утра, но утром я уже смогу вам показать рабочий код работы с VK API
1
1 / 1 / 1
Регистрация: 13.03.2012
Сообщений: 426
21.12.2014, 03:41  [ТС]
Цитата Сообщение от MastAKK Посмотреть сообщение
Семан, покажите, что получаете в ответ на запрос.
Я пропаду до завтрашнего утра, но утром я уже смогу вам показать рабочий код работы с VK API
"{"response":{"count":60,"items":[]}}"
0
 Аватар для MastAKK
148 / 139 / 18
Регистрация: 13.10.2012
Сообщений: 592
21.12.2014, 03:52
Странно... С таким id проблемы есть, а с id 1 (к примеру) нету. Проблема не в программе, а в API.
Пишите в тех.поддержку вк.
0
1 / 1 / 1
Регистрация: 13.03.2012
Сообщений: 426
21.12.2014, 04:01  [ТС]
все получилось
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void Widget::get_friends()
{
 
    QUrl current("https://api.vk.com/method/friends.get");
   QUrlQuery Param;
 
    Param.addQueryItem("user_id","17642250");
    Param.addQueryItem("access_token",token);
    Param.addQueryItem("v","5.2");
    current.setQuery(Param);
    QByteArray answer = GET(current);
    qDebug() <<answer;
    //qDebug() << current.toString();
 
}
спасибо всем)

Добавлено через 7 минут
Flassie, твой ответ насчет current.setQuery(Param); мне помог, скажи пожалуйста а зачем мы добавляем Param в current? если не составит труда
0
187 / 172 / 38
Регистрация: 03.08.2012
Сообщений: 596
21.12.2014, 14:48
Цитата Сообщение от Семан Посмотреть сообщение
Flassie, твой ответ насчет current.setQuery(Param); мне помог, скажи пожалуйста а зачем мы добавляем Param в current? если не составит труда
Не составит. Параметры get-запросом передаются в таком виде:
http://site.ru?param1=text&param2=text2
VkApi (да и не только) нужны параметры для вызова почти всех методов и, следовательно, их надо передавать как-то.

current.setQuery(Param) превращает ваш адрес в следующий:
Code
1
https://api.vk.com/method/friends.get?user_id=17642250&access_token=xxxxxxxxx&v=5.2
Посмотрите разницу ваших адресов до вывода current.setQuery и после вызова current.setQuery
1
1 / 1 / 1
Регистрация: 13.03.2012
Сообщений: 426
21.12.2014, 16:34  [ТС]
Все понял, спасибо большое
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.12.2014, 16:34
Помогаю со студенческими работами здесь

Как обратиться к api из программы, запущенной на том же сервере, где расположена api
Доброго времени суток Есть программа и api написанные на Blazor, которые работают под iis на одном сервере. Если в запросе данных из...

WIN API устарел как начать программировать на C++ .NET API (Без VisualStudio)
WIN API устарел как начать программировать на C++ .NET API (Без VisualStudio)

VK API как обойти ограничение api vk.com в 1000 человек?
Добрый день. У меня есть вопрос - как получить больше 1000 человек в запросе на поиск людей? while (true) { ...

Что такое API/REST API, NODE.js, Express?
Всем, доброго дня! Не так давно, я серьёзно задался вопросом, как разделить код в проекте и как происходит взаимосвязь проекта с базой...

Как верно использовать JavaScript native Fetch API вместо jQuery для опроса данных из API
Я разбираюсь в js, и на данный момент понял что метод из js Fetch может сам отправлять запросы на сервер и динамически подгружать данные по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru