Home |
This example shows how to use the SOAP component to submit searches via the Google SOAP API.
Testing this example requires a valid license key, which is available for free from http://api.google.com/.
examples/google/google.h:
/****************************************************************************
**
** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation ([email protected])
**
** This file is part of a Qt Solutions component.
**
** Commercial Usage
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Solutions Commercial License Agreement provided
** with the Software or, alternatively, in accordance with the terms
** contained in a written agreement between you and Nokia.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain
** additional rights. These rights are described in the Nokia Qt LGPL
** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this
** package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
** Please note Third Party Software included with Qt Solutions may impose
** additional restrictions and it is the user's responsibility to ensure
** that they have met the licensing requirements of the GPL, LGPL, or Qt
** Solutions Commercial license and the relevant license of the Third
** Party Software they are using.
**
** If you are unsure which license is appropriate for your use, please
** contact Nokia at [email protected].
**
****************************************************************************/
#ifndef GOOGLE_H_INCLUDED
#define GOOGLE_H_INCLUDED
#include <QtGui/QWidget>
#include <qtsoap.h>
class QLineEdit;
class QTextBrowser;
class QPushButton;
class Google : public QWidget
{
Q_OBJECT
public:
Google(QWidget *parent = 0);
private slots:
void submitRequest();
void getResponse();
private:
QtSoapHttpTransport http;
QLineEdit *searchString;
QLineEdit *googleKey;
QTextBrowser *resultView;
QPushButton *quitButton;
QPushButton *searchButton;
QString key;
};
#endif
examples/google/google.cpp:
/**************************************************************************** ** ** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation ([email protected]) ** ** This file is part of a Qt Solutions component. ** ** Commercial Usage ** Licensees holding valid Qt Commercial licenses may use this file in ** accordance with the Qt Solutions Commercial License Agreement provided ** with the Software or, alternatively, in accordance with the terms ** contained in a written agreement between you and Nokia. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain ** additional rights. These rights are described in the Nokia Qt LGPL ** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this ** package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** Please note Third Party Software included with Qt Solutions may impose ** additional restrictions and it is the user's responsibility to ensure ** that they have met the licensing requirements of the GPL, LGPL, or Qt ** Solutions Commercial license and the relevant license of the Third ** Party Software they are using. ** ** If you are unsure which license is appropriate for your use, please ** contact Nokia at [email protected]. ** ****************************************************************************/ #include <QtGui/QApplication> #include <QtGui/QMessageBox> #include <QtGui/QCursor> #include <QtCore/QFile> #include <QtGui/QLabel> #include <QtGui/QLineEdit> #include <QtGui/QTextBrowser> #include <QtGui/QLayout> #include <QtGui/QPushButton> #include "google.h" Google::Google(QWidget *parent) : QWidget(parent), http(this) { // Generate the GUI. quitButton = new QPushButton("&Quit", this); searchString = new QLineEdit(this); resultView = new QTextBrowser(this); QVBoxLayout *layout = new QVBoxLayout(this); QLabel *gLabel = new QLabel("Google Web APIs license key: ", this); googleKey = new QLineEdit(this); QHBoxLayout *topBar = new QHBoxLayout(); topBar->addWidget(gLabel); topBar->addWidget(googleKey); layout->addLayout(topBar); QLabel *sLabel = new QLabel("Search string: ", this); QPushButton *searchButton = new QPushButton("Search!", this); QHBoxLayout *searchBar = new QHBoxLayout(); searchBar->addWidget(sLabel); searchBar->addWidget(searchString); searchBar->addWidget(searchButton); layout->addLayout(searchBar); layout->addWidget(resultView); layout->addWidget(quitButton); // Connect signals to slots. Note the submitRequest() slots. connect(&http, SIGNAL(responseReady()), SLOT(getResponse())); connect(quitButton, SIGNAL(clicked()), SLOT(close())); connect(searchString, SIGNAL(returnPressed()), SLOT(submitRequest())); connect(searchButton, SIGNAL(clicked()), SLOT(submitRequest())); connect(googleKey, SIGNAL(returnPressed()), SLOT(submitRequest())); // Pressing enter should trigger a search, unless focus has been // explicitly moved. searchButton->setDefault(true); // Prepare to submit request. http.setAction("urn:GoogleSearchAction"); http.setHost("api.google.com"); } void Google::submitRequest() { // Check that the license key is set. if (googleKey->text() == "") { QMessageBox::warning(this, tr("Missing license key"), tr("Please enter your Google Web APIs license key." " If you do not have one, you can visit<br>" " http://api.google.com/ and create a Google" " account to obtain a license key.")); return; } // Check that we have a search string. if (searchString->text() == "") { QMessageBox::warning(this, tr("Missing search string"), tr("Please enter a search string.")); return; } // Generate request. Details about how to generate a proper // request are available from http://api.google.com/. The results // are always fetched as latin1 in this example, but this can be // easily changed (see the "ie" and "oe" arguments below). QtSoapMessage request; request.setMethod(QtSoapQName("doGoogleSearch", "urn:GoogleSearch")); request.addMethodArgument("key", "", googleKey->text()); request.addMethodArgument("q", "", searchString->text()); request.addMethodArgument("start", "", 0); request.addMethodArgument("maxResults", "", 10); request.addMethodArgument("filter", "", false, 0); request.addMethodArgument("restrict", "", ""); request.addMethodArgument("safeSearch", "", false, 0); request.addMethodArgument("lr", "", ""); request.addMethodArgument("ie", "", "latin1"); request.addMethodArgument("oe", "", "latin1"); // Submit the method request to the web service. http.submitRequest(request, "/search/beta2"); // Set the cursor to wait mode. QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); } void Google::getResponse() { // Set cursor back to normal shape. QApplication::restoreOverrideCursor(); // Reset resultView. resultView->clear(); // Get the response, check for error. const QtSoapMessage &resp = http.getResponse(); if (resp.isFault()) { resultView->setHtml(tr("<b>Query failed</b>: ") + resp.faultString().value().toString()); return; } // Extract the return value from this method response, check for // errors. const QtSoapType &res = resp.returnValue(); if (!res.isValid()) { resultView->append(tr("Invalid return value")); return; } // Generate resultView output. Make it resemble the actual web // output from http://www.google.com/. QString header(tr("Searched the web for <b>%1</b>, results %2 - %3 " "of about %4. Search took %5 seconds.<br><hr>") .arg(res["searchQuery"].toString()) .arg(res["startIndex"].toInt()) .arg(res["endIndex"].toInt()) .arg(res["estimatedTotalResultsCount"].toInt()) .arg(res["searchTime"].value().toDouble(), 0, 'f', 2)); const QtSoapType &resultElements = res["resultElements"]; QString allElements; for (int i = 0; i < resultElements.count(); ++i) { const QtSoapType &resultElement = res["resultElements"][i]; QString cat = resultElement["directoryCategory"]["fullViewableName"].toString(); QString summary = resultElement["summary"].toString(); QString title = resultElement["title"].toString(); QString snippet = resultElement["snippet"].toString(); QString url = resultElement["URL"].toString(); QString cachedSize = resultElement["cachedSize"].toString(); QString thisElement = "<br>"; if (!title.isEmpty()) { thisElement += "<font color=\"#0000FF\"><b><u>" + title + "</u></b></font><br>"; } else { thisElement += "<font color=\"#0000FF\"><b><u>" + url + "</u></b></font><br>"; } if (!snippet.isEmpty()) thisElement += snippet + "<br>"; if (!summary.isEmpty()) { thisElement += "<font color=\"#808080\">Description:</font> " + summary + "<br>"; } if (!cat.isEmpty()) { thisElement += "<font color=\"#808080\">Category: <u>" + cat + "</u></font><br>"; } if (!title.isEmpty()) { thisElement += "<font color=\"#008000\"><u>" + url + "</u> - " + cachedSize + "</font><br>"; } allElements += thisElement; } // Update the resultView. resultView->setHtml(header + allElements); }
examples/google/main.cpp:
/****************************************************************************
**
** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation ([email protected])
**
** This file is part of a Qt Solutions component.
**
** Commercial Usage
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Solutions Commercial License Agreement provided
** with the Software or, alternatively, in accordance with the terms
** contained in a written agreement between you and Nokia.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain
** additional rights. These rights are described in the Nokia Qt LGPL
** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this
** package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
** Please note Third Party Software included with Qt Solutions may impose
** additional restrictions and it is the user's responsibility to ensure
** that they have met the licensing requirements of the GPL, LGPL, or Qt
** Solutions Commercial license and the relevant license of the Third
** Party Software they are using.
**
** If you are unsure which license is appropriate for your use, please
** contact Nokia at [email protected].
**
****************************************************************************/
#include <QtGui/QApplication>
#include "google.h"
int main(int argc, char **argv)
{
QApplication app(argc, argv);
Google google;
google.show();
return app.exec();
}
examples/google/google.pro:
TEMPLATE = app INCLUDEPATH += . include(../../src/qtsoap.pri) # Input HEADERS += google.h SOURCES += google.cpp main.cpp
Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies) | Trademarks | Qt Solutions |