KL
Konstantin LazarevDec. 20, 2016, 10:37 a.m.

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

Qt, Google

Добрый день. Как при помощи Qt узнать позицию сайта в Google по запросу?
We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.
7

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

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

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

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

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

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

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

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

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

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. Картинки не успевают загрузиться.

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

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

 

Comments

Only authorized users can post comments.
Please, Log in or Sign up
Timeweb

Let me recommend you the excellent hosting on which EVILEG is located.

For many years, Timeweb has been proving his stability.

For projects on Django I recommend VDS hosting

View Hosting
EK

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

  • Result:90points,
  • Rating points8
EK

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

  • Result:50points,
  • Rating points-4
p

C++ - Test 001. The first program and data types

  • Result:40points,
  • Rating points-8
Last comments
g

Поздравляю всё Сообщество EVILEG с Новым Годом!!!

#include <iostream>using namespace std;int main() { cout << "Happy New Year and Thank you!"; return 0;}
MZ
MZ

Django - Tutorial 003. Model, Template, View on Django

from django.shortcuts import *from django.http import *from django.http import HttpResponseRedirectfrom django.contrib.auth.forms import *from django.urls import reverse_lazyfrom django.views …
MZ

Django - Tutorial 003. Model, Template, View on Django

Я дура. Разобралась. Но, остаюсь вашим читателем)
Now discuss on the forum

Проблемы с QTableView

Добрый день! Кто-нибудь сталкивался с тем, чтобы в QTableView (или QTableWidget) менять ширину/высоту и хэдров, и самих ячеек таблицы курсором мыши как это реализовано с помощью resizeSecti…

QSqlTableModel - Как добавить картинки в таблицу, чтобы они отражались в диалоговом окне, но не были частью модели

Если у вас модель, в переопределнном методе QVariant data надо привязываться к Qt::EditRole, это если открывающийся диалог редактирования является частью таблицы
t

Работа с потоками в разных версиях Qt

Добрый день, впервые начал проект в котором активно используются потоки и наткнулся на один не очень приятный момент, например: Существует главный поток (GUI) и созданный поток. Связь…
e
  • eviza
  • Jan. 13, 2021, 6:08 a.m.

QSerialPort. Как правильнее проверить сигнал CTS?

Здравствуйте! Есть задача отслеживать изменение сигнала CTS, можно ли это сделать по таймеру методом QSerialPort::pinoutSignals()?
About
Services
© EVILEG 2015-2020
Recommend hosting TIMEWEB