Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
ZxcR
3 / 3 / 1
Регистрация: 18.12.2014
Сообщений: 94
1

Http запрос в API

09.12.2015, 15:19. Просмотров 715. Ответов 21
Метки нет (Все метки)

Делал вот такую прогу на C#
Кликните здесь для просмотра всего текста
C#
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Web;
using Newtonsoft.Json;
 
 
namespace pogoda
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            
            string url = String.Format("http://api.openweathermap.org/data/2.5/weather?q={0}&APPID=df25ec9ea54575eb57c4ecc3c7f68cfe", textBox1.Text);
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
            HttpWebResponse res = (HttpWebResponse)req.GetResponse();
            Stream resp = res.GetResponseStream();
            StreamReader sr = new StreamReader(resp);
            string mypage = sr.ReadToEnd();
            
            MainData ro = JsonConvert.DeserializeObject<MainData>(mypage);
            pictureBox1.Load("http://openweathermap.org/img/w/"+ro.weather[0].icon+".png");
            double weath = Convert.ToDouble(ro.main.temp) - 275.15;
            label1.Text = "City of  " + ro.name + "," + ro.sys.country+" "+ weath.ToString()+" C";
            label2.Text = ro.weather[0].main;
            label3.Text = "Pressure:" + ro.main.pressure.ToString() + " hpa";
            label4.Text = "Cloudness: " + ro.clouds.all.ToString()+" %";
            label5.Text = "Humidity: " + ro.main.humidity.ToString()+" %";
            label6.Text = "Geo coords: " + "[" + ro.coord.lat.ToString() + "," + ro.coord.lon.ToString() + "]";
            label7.Text = String.Format("{0:HH:mm:ss}", new System.DateTime().AddSeconds(ro.sys.sunrise).AddHours(5));
            label8.Text = String.Format("{0:HH:mm:ss}", new System.DateTime().AddSeconds(ro.sys.sunset).AddHours(5));
 
            label1.Visible = true;
            groupBox1.Visible = true;
            
        }
 
        
 
      
    }
 
 
    public class Coord
    {
        public double lon { get; set; }
        public double lat { get; set; }
    }
 
    public class Weather
    {
        public int id { get; set; }
        public string main { get; set; }
        public string description { get; set; }
        public string icon { get; set; }
    }
 
    public class Main
    {
        public double temp { get; set; }
        public double pressure { get; set; }
        public double humidity { get; set; }
        public double temp_min { get; set; }
        public double temp_max { get; set; }
    }
 
    public class Wind
    {
        public double speed { get; set; }
        public double deg { get; set; }
    }
 
    public class Clouds
    {
        public int all { get; set; }
    }
 
    public class Rain
    {
        public int i_3h { get; set; }
    }
 
    public class Sys
    {
        public int type { get; set; }
        public int id { get; set; }
        public double message { get; set; }
        public string country { get; set; }
        public int sunrise { get; set; }
        public int sunset { get; set; }
    }
 
    public class MainData
    {
        public Coord coord { get; set; }
        public List<Weather> weather { get; set; }
        public string @base { get; set; }
        public Main main { get; set; }
        public Wind wind { get; set; }
        public Clouds clouds { get; set; }
        public Rain rain { get; set; }
        public int dt { get; set; }
        public Sys sys { get; set; }
        public int id { get; set; }
        public string name { get; set; }
        public int cod { get; set; }
    }
}


Помогите сделать на qt
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2015, 15:19
Ответы с готовыми решениями:

Http запрос в QT
Привет народ! я новичок в QT и вот не получается с помощью http подключится к...

HTTP GET запрос
Заголовочный файл .h #include &lt;QNetworkAccessManager&gt; #include...

Правильно составить http запрос
Привет всем! хочу отправить аудиозапись на сервер VK ... но почему то всегда...

Как в qt слушать http порт и принимать GET или POST запрос?
Как в qt слушать http порт и принимать GET или POST запрос?

Запрос в Instagram API возвращает пустой массив JSON
Такая проблема: хочу разобраться с работой API instagram. Пишу клиент. Но...

21
edward_freedom
1554 / 1433 / 303
Регистрация: 01.10.2011
Сообщений: 2,636
09.12.2015, 16:03 2
ZxcR, Если ты действительно сам писал это, то тебе не составит перевести все это, вот тебе офф. документация
0
ZxcR
3 / 3 / 1
Регистрация: 18.12.2014
Сообщений: 94
10.12.2015, 19:32  [ТС] 3
Что за ошибка помогите ?
Кликните здесь для просмотра всего текста
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "weather.h"
#include "ui_weather.h"
#include "QtNetwork/QNetworkAccessManager"
Weather::Weather(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Weather)
{
    ui->setupUi(this);
}
 
Weather::~Weather()
{
    delete ui;
}
void Weather::MyFunc(){
 
    QNetworkAccessManager *manager = new QNetworkAccessManager(this);
 
}



Ошибка
C:\Users\User\Documents\weather\weather.cpp:17: error: undefined reference to `_imp___ZN21QNetworkAccessManagerC1EP7QObject'
0
OneMoreGres
70 / 70 / 32
Регистрация: 07.11.2015
Сообщений: 281
10.12.2015, 20:17 4
В .pro-файле есть QT += network ?
1
ZxcR
3 / 3 / 1
Регистрация: 18.12.2014
Сообщений: 94
10.12.2015, 21:20  [ТС] 5
не было), исправил уже , спасибо

Добавлено через 1 час 1 минуту
Кликните здесь для просмотра всего текста
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
#include "pogoda.h"
#include "ui_pogoda.h"
#include <QtNetwork/QNetworkAccessManager>
#include <qnetwork.h>
#include <QtNetwork/QNetworkReply>
#include <QtNetwork/QNetworkRequest>
#include <QUrl>
#include <QString>
#include <QEventLoop>
#include <QDebug>
 
Pogoda::Pogoda(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Pogoda)
{
    ui->setupUi(this);
    connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(MyFunc()));
 
 
 
 
 
 
}
 
Pogoda::~Pogoda()
{
    delete ui;
}
 
void Pogoda::MyFunc(){
 
    QNetworkAccessManager *manager = new QNetworkAccessManager(this);
    QNetworkReply* reply = manager->get(QNetworkRequest(QUrl("http://api.openweathermap.org/data/2.5/weather?q=London&APPID=df25ec9ea54575eb57c4ecc3c7f68cfe")));
    QEventLoop loop;
    connect(manager, SIGNAL(finished(QNetworkReply*)), &loop, SLOT(quit()));
 
    QByteArray ar =  reply->readAll();
    reply->deleteLater();
    qDebug()<< ar;
 
}


qt.network.ssl: QSslSocket: cannot resolve TLSv1_1_client_method
qt.network.ssl: QSslSocket: cannot resolve TLSv1_2_client_method
qt.network.ssl: QSslSocket: cannot resolve TLSv1_1_server_method
qt.network.ssl: QSslSocket: cannot resolve TLSv1_2_server_method
qt.network.ssl: QSslSocket: cannot resolve SSL_select_next_proto
qt.network.ssl: QSslSocket: cannot resolve SSL_CTX_set_next_proto_select_cb
qt.network.ssl: QSslSocket: cannot resolve SSL_get0_next_proto_negotiated

как это решить?
0
Hellko
6 / 6 / 2
Регистрация: 17.11.2012
Сообщений: 65
10.12.2015, 21:26 6
Цитата Сообщение от ZxcR Посмотреть сообщение
как это решить?
Установить openssl, либо положить необходимые библиотеки в папку с проектом
0
ZxcR
3 / 3 / 1
Регистрация: 18.12.2014
Сообщений: 94
10.12.2015, 23:17  [ТС] 7
Положил необходимые библиотеки в папку с файлом, та же фигня(
0
schdub
Эксперт С++
3037 / 1379 / 421
Регистрация: 19.01.2009
Сообщений: 3,681
Завершенные тесты: 1
10.12.2015, 23:28 8
ZxcR, что возвращает данный код?
C++
1
qDebug() << QSslSocket::supportsSsl();
Добавлено через 48 секунд
Хотя не понятно при чем здесь SSL, если вы обращаетесь по http://

Добавлено через 2 минуты
QSslSocket error when SSL is NOT used
0
ZxcR
3 / 3 / 1
Регистрация: 18.12.2014
Сообщений: 94
10.12.2015, 23:30  [ТС] 9
возвращает true
0
schdub
Эксперт С++
3037 / 1379 / 421
Регистрация: 19.01.2009
Сообщений: 3,681
Завершенные тесты: 1
10.12.2015, 23:31 10
Цитата Сообщение от ZxcR Посмотреть сообщение
Положил необходимые библиотеки в папку с файлом, та же фигня(
а как запускаете? из креатора?
0
ZxcR
3 / 3 / 1
Регистрация: 18.12.2014
Сообщений: 94
10.12.2015, 23:34  [ТС] 11
Да через Creator
0
schdub
Эксперт С++
3037 / 1379 / 421
Регистрация: 19.01.2009
Сообщений: 3,681
Завершенные тесты: 1
10.12.2015, 23:48 12
ZxcR, dll-ки должны быть в папке, которая выводится этим кодом
C++
1
qDebug() << QDir::currentPath();
По ссылке, выше, пишут что это просто варнинг, который можно проигнорировать если вы не используете SSL, ну или разбираться с .dll ками.
0
ZxcR
3 / 3 / 1
Регистрация: 18.12.2014
Сообщений: 94
10.12.2015, 23:56  [ТС] 13
Cпасибо большое, оказывается не туда либы клал, положил в нужную папку и errors пропали.

Кликните здесь для просмотра всего текста
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
void zxcr::MyFunc(){
 
    QNetworkAccessManager *manager = new QNetworkAccessManager(this);
    QNetworkReply *reply = manager->get(QNetworkRequest(QUrl("http://api.openweathermap.org/data/2.5/weather?q=London&APPID=df25ec9ea54575eb57c4ecc3c7f68cfe")));
 
    QByteArray ar = reply->readAll();
 
  
   qDebug()<<ar;
   
 
 
}

Запрос вроде должен возвращать Json строку, но выводит пустоту "", может я что-то не так делаю?
0
OneMoreGres
70 / 70 / 32
Регистрация: 07.11.2015
Сообщений: 281
11.12.2015, 11:30 14
Надо дождаться, пока запрос отработает.
Это либо сигнал QNetworkReply::finished либо сигнал QNetworkAccessManager::finished
0
ZxcR
3 / 3 / 1
Регистрация: 18.12.2014
Сообщений: 94
11.12.2015, 12:02  [ТС] 15
Есть строка
Кликните здесь для просмотра всего текста
C++ (Qt)
1
{"coord":{"lon":68.78,"lat":38.56},"weather":[{"id":711,"main":"Smoke","description":"smoke","icon":"50d"}],"base":"cmc stations","main":{"temp":271.15,"pressure":1039,"humidity":68,"temp_min":271.15,"temp_max":271.15},"wind":{"speed":1},"clouds":{"all":0},"dt":1449819000,"sys":{"type":1,"id":7388,"message":0.0081,"country":"GB","sunrise":1449801127,"sunset":1449835433},"id":7280679,"name":"London","cod":200}


C++ (Qt)
1
2
3
QJsonDocument jsonResponse = QJsonDocument::fromJson(string.toUtf8());
QJsonObject jsonObject = jsonResponse.object();
qDebug()<<jsonObject["coord"].toObject().value("lat");
Делаю так и выводится lat, пытаюсь сделать qDebug()<<jsonObject["coord"].toObject().value("lat").toString() и ничего не выводит, как мне в строку засунуть значение?
0
schdub
Эксперт С++
3037 / 1379 / 421
Регистрация: 19.01.2009
Сообщений: 3,681
Завершенные тесты: 1
11.12.2015, 12:35 16
Цитата Сообщение от ZxcR Посмотреть сообщение
qDebug()<<jsonObject["coord"].toObject().value("lat").toString()
ZxcR, lat это не строка, а double. Нужно вызывать toDouble() вместо toString().
0
ZxcR
3 / 3 / 1
Регистрация: 18.12.2014
Сообщений: 94
11.12.2015, 13:22  [ТС] 17
а как мне потом это на label допустим разместить?
0
OneMoreGres
70 / 70 / 32
Регистрация: 07.11.2015
Сообщений: 281
11.12.2015, 13:25 18
C++ (Qt)
1
QString::number
0
ZxcR
3 / 3 / 1
Регистрация: 18.12.2014
Сообщений: 94
11.12.2015, 15:49  [ТС] 19
C++ (Qt)
1
{"coord":{"lon":68.78,"lat":38.56},"weather":[{"id":711,"main":"Smoke","description":"smoke","icon":"50d"}],"base":"cmc stations","main":{"temp":271.15,"pressure":1039,"humidity":68,"temp_min":271.15,"temp_max":271.15},"wind":{"speed":1},"clouds":{"all":0},"dt":1449819000,"sys":{"type":1,"id":7388,"message":0.0081,"country":"GB","sunrise":1449801127,"sunset":1449835433},"id":7280679,"name":"London","cod":200}
Как обратиться к weather->main?

Добавлено через 1 час 17 минут
C++ (Qt)
1
2
 QPixmap myimg("http://openweathermap.org/img/w/10d.png");
        ui->label->setPixmap(myimg);
Не выводит на форму картинку, в шарпе делал так
C#
1
pictureBox1.Load("http://openweathermap.org/img/w/10d.png");
как в QT это делается?
0
OneMoreGres
70 / 70 / 32
Регистрация: 07.11.2015
Сообщений: 281
11.12.2015, 19:29 20
"weather" - массив, поэтому сначала обратитесь к требуемому его элементу по индексу и уже в нем ищите "main".

QPixmap из URL, насколько я знаю, только вручную (например через тот же QNetworkAccessManager)
0
11.12.2015, 19:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.12.2015, 19:29

Как реализовать запрос к API Вконтакте, чтобы получить историю сообщений с определенным пользователем?
Привет всем) Какой вид должен иметь запрос к API, чтобы получить историю...

HTTP запрос через Apache HTTP Client ничего не возвращает
У меня есть один сайт. Простой сайт на php. И есть второй сайт, где...

Запрос через http - HTTP Error 400
Добрый день Есть запрос, который хотим отправлять через http ВЫБРАТЬ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru