/** * Creates place * @param name the name a place is known as * @param containedWithin placeid within which the new place can be found. Be close as possible with contained place * @param token token found in the response from QTweetGeoSimilarPlaces * @param latLong latitude and longitude */ void QTweetGeoPlaceCreate::create(const QString &name, const QString &containedWithin, const QString &token, const QTweetGeoCoord &latLong) { if (!isAuthenticationEnabled()) { qCritical("Needs authentication to be enabled"); return; } QUrl url("http://api.twitter.com/1/geo/place.json"); QUrl urlQuery(url); urlQuery.addEncodedQueryItem("name", QUrl::toPercentEncoding(name)); urlQuery.addQueryItem("contained_within", containedWithin); urlQuery.addQueryItem("token", token); urlQuery.addQueryItem("lat", QString::number(latLong.latitude())); urlQuery.addQueryItem("long", QString::number(latLong.longitude())); QByteArray oauthHeader = oauthTwitter()->generateAuthorizationHeader(urlQuery, OAuth::POST); QNetworkRequest req(url); req.setRawHeader(AUTH_HEADER, oauthHeader); req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); QByteArray statusPost = urlQuery.toEncoded(QUrl::RemoveScheme | QUrl::RemoveAuthority | QUrl::RemovePath); statusPost.remove(0, 1); QNetworkReply *reply = oauthTwitter()->networkAccessManager()->post(req, statusPost); connect(reply, SIGNAL(finished()), this, SLOT(reply())); }
/** * Posts a tweet * @param status text of the status update * @param inReplyToStatus ID of a existing tweet is in reply to * @param latLong latitude and longitude * @param placeid a place in the world (use reverse geocoding) * @param displayCoordinates whether or not to put a exact coordinates a tweet has been sent from */ void QTweetStatusUpdate::post(const QString &status, qint64 inReplyToStatus, const QTweetGeoCoord& latLong, const QString &placeid, bool displayCoordinates, bool trimUser, bool includeEntities) { if (!isAuthenticationEnabled()) { qCritical("Needs authentication to be enabled"); return; } QUrl url("http://api.twitter.com/1/statuses/update.json"); QUrl urlQuery("http://api.twitter.com/1/statuses/update.json"); urlQuery.addEncodedQueryItem("status", QUrl::toPercentEncoding(status)); if (inReplyToStatus != 0) urlQuery.addQueryItem("in_reply_to_status_id", QString::number(inReplyToStatus)); if (latLong.isValid()) { urlQuery.addQueryItem("lat", QString::number(latLong.latitude())); urlQuery.addQueryItem("long", QString::number(latLong.longitude())); } if (!placeid.isEmpty()) urlQuery.addQueryItem("place_id", placeid); if (displayCoordinates) urlQuery.addQueryItem("display_coordinates", "true"); if (trimUser) urlQuery.addQueryItem("trim_user", "true"); if (includeEntities) urlQuery.addQueryItem("include_entities", "true"); QByteArray oauthHeader = oauthTwitter()->generateAuthorizationHeader(urlQuery, OAuth::POST); QNetworkRequest req(url); req.setRawHeader(AUTH_HEADER, oauthHeader); req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); //build status post array QByteArray statusPost = urlQuery.toEncoded(QUrl::RemoveScheme | QUrl::RemoveAuthority | QUrl::RemovePath); //remove '?' statusPost.remove(0, 1); QNetworkReply *reply = oauthTwitter()->networkAccessManager()->post(req, statusPost); connect(reply, SIGNAL(finished()), this, SLOT(reply())); }
/** * Start geo reversing * @param latLong latitutde and longitude * @param accuracy a hint on the "region" in which to search in meters * @param granularity minimal granularity of place types to return * @param maxResults hint as to the number of results to return */ void QTweetGeoReverseGeoCode::getPlaces(const QTweetGeoCoord& latLong, int accuracy, QTweetPlace::Type granularity, int maxResults) { QUrl url("https://api.twitter.com/1/geo/reverse_geocode.json"); url.addQueryItem("lat", QString::number(latLong.latitude())); url.addQueryItem("long", QString::number(latLong.longitude())); if (accuracy != 0) url.addQueryItem("accuracy", QString::number(accuracy)); switch (granularity) { case QTweetPlace::Poi: url.addQueryItem("granularity", "poi"); break; case QTweetPlace::Neighborhood: url.addQueryItem("granularity", "neighborhood"); break; case QTweetPlace::City: url.addQueryItem("granularity", "city"); break; case QTweetPlace::Admin: url.addQueryItem("granularity", "admin"); break; case QTweetPlace::Country: url.addQueryItem("granularity", "country"); break; default: ; } if (maxResults != 0) url.addQueryItem("max_results", QString::number(maxResults)); QNetworkRequest req(url); if (isAuthenticationEnabled()) { QByteArray oauthHeader = oauthTwitter()->generateAuthorizationHeader(url, OAuth::GET); req.setRawHeader(AUTH_HEADER, oauthHeader); } QNetworkReply *reply = oauthTwitter()->networkAccessManager()->get(req); connect(reply, SIGNAL(finished()), this, SLOT(reply())); }
/** * Posts a tweet * @param status text of the status update * @param inReplyToStatus ID of a existing tweet is in reply to * @param latLong latitude and longitude * @param placeid a place in the world (use reverse geocoding) * @param displayCoordinates whether or not to put a exact coordinates a tweet has been sent from */ void RESTStatusUpdateMedia::updateStatusWithMedia(const QString &status, const QString &filePath, qint64 inReplyToStatus, const QTweetGeoCoord& latLong, const QString &placeid, bool displayCoordinates, bool trimUser, bool includeEntities) { QHash<QString, QString> postParams; postParams.insert("status", status); if (inReplyToStatus != 0) postParams.insert("in_reply_to_status_id", QString::number(inReplyToStatus)); if (latLong.isValid()) { postParams.insert("lat", QString::number(latLong.latitude())); postParams.insert("long", QString::number(latLong.longitude())); } if (!placeid.isEmpty()){ postParams.insert("place_id", placeid); } if (displayCoordinates){ postParams.insert("display_coordinates", "true"); } if (trimUser){ postParams.insert("trim_user", "true"); } if (includeEntities){ postParams.insert("include_entities", "true"); } post(postParams, filePath); }
/** * Starts geo searching * @param latLong latitude and longitude * @param query text to match against while executing a geo-based query, * best suited for finding nearby locations by name * @param ip ip address. Used when attempting to fix geolocation based off of the user's IP address. * @param granularity this is the minimal granularity of place types to return * @param accuracy hint on the "region" in which to search in meters * @param maxResults hint as to the number of results to return * @param containedWithin this is the placeID which you would like to restrict the search results to */ void QTweetGeoSearch::search(const QTweetGeoCoord &latLong, const QString &query, const QString &ip, QTweetPlace::Type granularity, int accuracy, int maxResults, const QString &containedWithin) { QUrl url("http://api.twitter.com/1/geo/search.json"); if (latLong.isValid()) { url.addQueryItem("lat", QString::number(latLong.latitude())); url.addQueryItem("long", QString::number(latLong.longitude())); } if (!query.isEmpty()) url.addEncodedQueryItem("query", QUrl::toPercentEncoding(query)); if (!ip.isEmpty()) //doesn't do ip format address checking url.addQueryItem("ip", ip); switch (granularity) { case QTweetPlace::Poi: url.addQueryItem("granularity", "poi"); break; case QTweetPlace::Neighborhood: url.addQueryItem("granularity", "neighborhood"); break; case QTweetPlace::City: url.addQueryItem("granularity", "city"); break; case QTweetPlace::Admin: url.addQueryItem("granularity", "admin"); break; case QTweetPlace::Country: url.addQueryItem("granularity", "country"); break; default: ; } if (accuracy != 0) url.addQueryItem("accuracy", QString::number(accuracy)); if (maxResults != 0) url.addQueryItem("max_results", QString::number(maxResults)); if (!containedWithin.isEmpty()) url.addQueryItem("contained_within", containedWithin); QNetworkRequest req(url); if (isAuthenticationEnabled()) { QByteArray oauthHeader = oauthTwitter()->generateAuthorizationHeader(url, OAuth::GET); req.setRawHeader(AUTH_HEADER, oauthHeader); } QNetworkReply *reply = oauthTwitter()->networkAccessManager()->get(req); connect(reply, SIGNAL(finished()), this, SLOT(reply())); }