KL
Konstantin Lazarev20. Dezember 2016 10:37

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

Qt, Google

Добрый день. Как при помощи Qt узнать позицию сайта в Google по запросу?
Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

7
Evgenii Legotckoi
  • 21. Dezember 2016 02:41

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

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

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

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

    KL
    • 21. Dezember 2016 12:26
    При помощи парсинга выдачи Google возможно реализовать? Я могу спарсить html код страницы сайтов, которые не защищены.
    В Google стоит защита. Может, у вас есть подобная практика?
      Evgenii Legotckoi
      • 21. Dezember 2016 12:35
      Нет. Такой практики у меня нет.
      Но думаю, что при парсинге XML выдачи для кастомизированного поиска может что-нибудь получиться.
      Посмотрите описание XML API Reference
        KL
        • 22. Dezember 2016 03:56
        • Die Antwort wurde als Lösung markiert.

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

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

          Evgenii Legotckoi
          • 23. Dezember 2016 00:43

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

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

            KL
            • 24. Dezember 2016 14:58

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

              Evgenii Legotckoi
              • 26. Dezember 2016 03:21

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

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

               

                Kommentare

                Nur autorisierte Benutzer können Kommentare posten.
                Bitte Anmelden oder Registrieren
                Letzte Kommentare
                ИМ
                Игорь Максимов5. Oktober 2024 07:51
                Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                d
                dblas55. Juli 2024 11:02
                QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                k
                kmssr8. Februar 2024 18:43
                Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                EVA
                EVA25. Dezember 2023 10:30
                Boost - statisches Verknüpfen im CMake-Projekt unter Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
                Jetzt im Forum diskutieren
                J
                JacobFib17. Oktober 2024 03:27
                добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
                JW
                Jhon Wick1. Oktober 2024 15:52
                Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
                КГ
                Кирилл Гусарев27. September 2024 09:09
                Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
                F
                Fynjy22. Juli 2024 04:15
                при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

                Folgen Sie uns in sozialen Netzwerken