Privacy policyContactsAbout siteOpinionsGitHubDonate
© EVILEG 2015-2018
Recommend hosting
TIMEWEB
KL
Dec. 20, 2016, 3:37 p.m.

Запрос позиций сайта в выдаче Google при помощи Qt

Qt, Google

Добрый день. Как при помощи Qt узнать позицию сайта в Google по запросу?
7

День добрый.
Вопрос так вопрос… Смотря что Вы хотите получить..
Если хотите просматривать данные по своему сайту, то у Google Search Console и Google Analytics есть API.
Изучаете API и реализовываете запросы с помощью QNetworkAccessManager.

Если хотите искать инфу в поисковике по любому сайту, то можете посмотреть информацию по XML Custom Search API.

А как такового открытого API для проверок позиций сайта Google вроде бы не предоставляет… Иначе бы у всех этих сервисов проверки позиций сайта результаты были бы одинаковые.

То есть необходимо реализовывать систему запросов и обработки поисковой выдачи. Это немаленькая задача, но вполне реализуемая средствами Qt. Только не забывайте, что Google не приемлет автоматизированных средств запросов к поиску и довольно быстро попросит ввести каптчу.

0
KL
При помощи парсинга выдачи Google возможно реализовать? Я могу спарсить html код страницы сайтов, которые не защищены.
В Google стоит защита. Может, у вас есть подобная практика?
0
Нет. Такой практики у меня нет.
Но думаю, что при парсинге XML выдачи для кастомизированного поиска может что-нибудь получиться.
Посмотрите описание XML API Reference
0
KL

Евгений, большое спасибо. Ваша статья очень мне помогла, как и урок, который вы написали для работы с QNetworkAccessManager. Я не совсем понял зачем создавать отдельный класс downloade, почему нельзя создать все в widget. Но запрос составил и файл скачал. Запрос выглядит примерно так:
QUrl url(“http://www.google.ru/search?hl=ru&q=платные+комментарии&oq=платные+комментарии&lr=lang_ru&cr=countryRU&xml_no_dtd;”); // URL, к которому будем получать данные

Подскажите, при считывании из файла идет наложение текста выглядит это примерно так:

0

Пожалуйста.
Есть интерфейс, а есть логика работы с сетью… На мой взгляд логику работы с сетью лучше выносить в отдельный класс. Хотя вы правы, можно было сделать всё в widget`е.

Видимо, в наложении текста должна была быть картинка. Прикрепите её во вложения.

0
KL

Евгений, подскажите как загрузить массив фотографий при помощи QNetworkAccessManager.
Вот моя реализация.
GoogleQuery::GoogleQuery(QWidget *parent) :
QWidget(parent),
ui(new Ui::GoogleQuery)
{
ui->setupUi(this);
connect(&pageYandexTic,SIGNAL(finished(QNetworkReply*)), SLOT(on_load(QNetworkReply*)));
QStringList list;
QStringList.append(UrlSite1);
QStringList.append(UrlSite2);
QStringList.append(UrlSite3);
}
void GoogleQuery::on_pushButton_clicked()
{
for(int i=0; i<list.size(); i++)
{
QNetworkRequest request;
request.setUrl(list);
pageYandexTic.get(request); // QNetworkAccessManager отправляем запрос с урлом картинки
}
}
void GoogleQuery::on_load(QNetworkReply* reply)
{
QPixmap pixmap;
pixmap.loadFromData(reply->readAll());
ui->label->setPixmap(pixmap);
}

Проблема в том, что изначально выполняется цикл for, а затем on_load. Картинки не успевают загрузиться.

0

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

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QLabel>
 
namespace Ui {
class MainWindow;
}
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
 
private slots:
    void on_pushButton_clicked();
    void onLoad(QNetworkReply* reply);
 
private:
    Ui::MainWindow *ui;
    QStringList urlsList;
    QNetworkAccessManager downloader;
};
 
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(&downloader, &QNetworkAccessManager::finished, this, &MainWindow::onLoad);
 
    urlsList.append("https://www.alfaromeousa.com/content/alfausa/en/cars/alfa-romeo-giulia-quadrifoglio/_jcr_content/image.img.png/1461766810123.png");
    urlsList.append("https://www.alfaromeousa.com/content/alfausa/en/cars/alfa-romeo-4c-spider/_jcr_content/image.img.png/1461766874697.png");
    urlsList.append("http://buyersguide.caranddriver.com/media/assets/submodel/7063.jpg");
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
void MainWindow::on_pushButton_clicked()
{
    if (!urlsList.isEmpty())
    {
        QNetworkRequest request;
        request.setUrl(urlsList.first());
        urlsList.removeFirst();
        downloader.get(request);
    }
}
 
void MainWindow::onLoad(QNetworkReply *reply)
{
    QPixmap image;
    image.loadFromData(reply->readAll());
    QLabel* label = new QLabel(this);
    label->setPixmap(image);
    ui->verticalLayout->addWidget(label);
    on_pushButton_clicked();
}

 

0

Comments

Only authorized users can post comments.
Please, Log in or Sign up
IO
Jan. 20, 2019, 6:39 p.m.
Ivan Otreshko

C++ - Тест 003. Условия и циклы

  • Result:0points,
  • Rating points-10
IO
Jan. 20, 2019, 3:27 p.m.
Ivan Otreshko

C++ - Тест 003. Условия и циклы

  • Result:0points,
  • Rating points-10
v
Jan. 17, 2019, 11:51 a.m.
vitalir12

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:20points,
  • Rating points-10
Last comments
I
Jan. 16, 2019, 8:06 a.m.
IscanderChe

Заработало. Забыл model->select(); вписать.
I
Jan. 16, 2019, 8:02 a.m.
IscanderChe

Всё равно пусто, хотя строка с данными в базу добавляется.
Jan. 16, 2019, 7:51 a.m.
Евгений Легоцкой

потому, что нужно сохранять информацию для всех остальных ролей и столбцов через вызов переопределённого метода. Да к тому же вы ещё и зациклили вызов метода data. QVariant MySqlTableModel:...
I
Jan. 16, 2019, 7:43 a.m.
IscanderChe

Сделал вот так. В tableView ничего нет, кроме заголовка. QVariant MySqlTableModel::data(const QModelIndex &index, int role) const{ if (role == Qt::DisplayRole) { QTime ...
Now discuss on the forum
Jan. 21, 2019, 9:32 p.m.
Евгений Легоцкой

Добрый день. Потому, что C# и Java библиотеки внутри имеют байт-код, а не компилированные исходники в машинном коде, как в C++. Для их использования нужен JIT-компилятор, который на лету...
Jan. 21, 2019, 9:16 p.m.
Евгений Легоцкой

День добрый. Я у себя это дело запустил. Но у меня оба варианта заработало. Но у меня версия Qt была 5.11.2. Из-за этого версия Qt Quick 2.12,которую вы использовали, не нашлась. Я...
Jan. 21, 2019, 4:24 p.m.
Михаиллл

Нашел ссылку на древние типы данных , а тут нынешние их аналоги.Но все равно каое что непоня:что такое : LPCTSTR, CALLBACK (наверно QDialig),IDOK, EDITSTREAM, TCHARКод...
Jan. 21, 2019, 2:30 p.m.
Евгений Легоцкой

Порядок создания тем - пункт 4
Jan. 21, 2019, 7:36 a.m.
Евгений Легоцкой

Добрый день! Из ваего вопроса понятна первая часть. На сайте есть статья по динамическому созданию виджетов, посмотрите её для начала - Динамическое создание виджетов . ...
Join us in social networks

For registered users on the site there is a minimum amount of advertising