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

Qt - Test 001. Signals and slots

  • Result:52points,
  • Rating points-4
CB

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

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

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

  • Result:70points,
  • Rating points1
Last comments

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

Не знаю, где написать. Но ЛС на сайте не отправляют сообщения.
A
  • Andrey
  • April 28, 2021, 1:25 a.m.

Django - Tutorial 036. How to add authentication through social networks. VKontakte

после того как дам разрешение для просмотра моего емайл, вот такая ошибка: AuthForbidden at /social-auth/complete/vk-oauth2/ Your credentials aren't allowed Вот сетингс: SOC…
DV

Qt/C++ - Lesson 051. QMediaPlayer – simple audio player

Добрый вечер. Хотел бы получить консультацию по работе с проектом на Mac OS. Открыл проект в QT и собрал его. Проблема в том, что он не воспроизводит треки и их названия зацикленно мелькают в по…
SS

Как соответствовать новым требованиям Google Play

Добрый день. Спасибо вам огромное за вашу статью! только начинаю изучать QT под Андроид 4 дня потратил на то чтобы подобрать версию QT которая наконец то скомпилирует мне на windo…
YA

PyQt5 - Tutorial 009. Using QThread with MoveToThread

Hello. Let's say I want to send some variables to "run" define. How can we do that? I modified your code, I tried something like below, but the GUI is frozen that way. I could not be able to und…
Now discuss on the forum
C

Проблема с кнопкой закрытия вертикальных вкладок

Здравствуйте! У меня возник вопрос с вертикальными вкладками в Qt. Вот пример: Дело в том что иконка закрытия перекрывает текст вкладки. Может вы знаете как задать значение …
U

Как в qt передать текст из одного окна в другое с помощью механизма сигналов и слотов?

К слову сказать... Хоть это и не относится к теме вопроса, но коли Вы студент и в указателях вроде как разбирались... Укажу на косяк) my2window = new anotherWindow(); В рамках Вашего мал…

QScrollArea dynamically add QCheckBoxes

Всё правильно. Это просто спамер, который отправился в вечный бан.

qml зажатая кнопка мыши в одной MouseArea и сигналы мыши из другой MouseArea

ну начнем с того что это чуть не так работает, для примера: ScrollView{ anchors.fill: parent anchors.topMargin: 10 id: _scroll Column{ anchors…
U

Работа с созданным обьектом qml через Qt.createComponent

Вот так должно прокатить: component.createObject(parent, {"objectName": "VotEtoYaSozdal!!!"; "iMaxWidthRow": 100}); Жаль правда, что месяц прошел с даты вопроса)
About
Services
© EVILEG 2015-2021
Recommend hosting TIMEWEB