Реклама
  • 20 декабря 2016 г. 21:37

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

Qt, Google

Добрый день. Как при помощи Qt узнать позицию сайта в Google по запросу?
  • #
  • 21 декабря 2016 г. 13:41

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

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

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

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

При помощи парсинга выдачи Google возможно реализовать? Я могу спарсить html код страницы сайтов, которые не защищены.
В Google стоит защита. Может, у вас есть подобная практика?
Реклама
Нет. Такой практики у меня нет.
Но думаю, что при парсинге XML выдачи для кастомизированного поиска может что-нибудь получиться.
Посмотрите описание XML API Reference
  • EVILEG
  • #
  • Ответ был помечен как решение
  • 22 декабря 2016 г. 14:56

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

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

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

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

Реклама

Евгений, подскажите как загрузить массив фотографий при помощи 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. Картинки не успевают загрузиться.

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

#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();
}

 

Реклама

Ответы

Только авторизованные пользователи могут отвечать на форуме.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь
Последние комментарии
  • EVILEG
  • 24 апреля 2017 г. 20:44
Подключение вашего Qt приложения к сервисам Google, используя OAuth 2.0

У меня пока мыслей на этот счёт нет ((

Подключение вашего Qt приложения к сервисам Google, используя OAuth 2.0

Пробовал играться с шарком, либо я криво смотрел, либо почему-то POST запросы на oauth.yandex.ru не летят, хотя должны постом лететь, я и исходники QOAuth2AuthorizationCodeFlow ковырял на пред

  • EVILEG
  • 24 апреля 2017 г. 13:39
Подключение вашего Qt приложения к сервисам Google, используя OAuth 2.0

Возможно, стоит Wireshark`ом запросы посмотреть. В чём отличие идёт аякс запроса от запроса из библиотеки. Возможно, что не хватает какой-нибудь заголовочной информации.

Сейчас обсуждают на форуме
Signal из Dialog

Добрый вечер.Вроде бы разобрался как работают signal и slot, но возник такой вопрос.Есть Widget из которого открывается Dialog, в Dialog-е есть кнопка, savebutton, по которой происходит вс...

  • EVILEG
  • 26 апреля 2017 г. 20:53
Область

Да. Это возможно. Определитесь только с задачей, которую эта область должна выполнять. А то получается, что нужно создать что-то, в чём нужно делать что-то. Какой-то абстрактный конь в вакууме...

  • Arrow
  • 26 апреля 2017 г. 20:10
Дополнительное окошко

Если кто-то собрался такое разрабатывать, то думаю лучше идти к тем, кто за это хорошо заплатит. Самому писать в одиночку в надежде продать не вариант. :)

  • EVILEG
  • 26 апреля 2017 г. 19:20
Сохранение PDF файла в БД

Да. Это весьма удобно, что к базе данных может обращаться.

  • EVILEG
  • 26 апреля 2017 г. 19:11
Qt Installer Framework и Redistributable пакеты.

Смотрю, всё обошлось даже весьма малой кровью. Замечательно.