|
Packit |
4b6dd7 |
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
|
Packit |
4b6dd7 |
/*
|
|
Packit |
4b6dd7 |
* GData Client
|
|
Packit |
4b6dd7 |
* Copyright (C) 2014 Carlos Garnacho <carlosg@gnome.org>
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* GData Client is free software; you can redistribute it and/or
|
|
Packit |
4b6dd7 |
* modify it under the terms of the GNU Lesser General Public
|
|
Packit |
4b6dd7 |
* License as published by the Free Software Foundation; either
|
|
Packit |
4b6dd7 |
* version 2.1 of the License, or (at your option) any later version.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* GData Client is distributed in the hope that it will be useful,
|
|
Packit |
4b6dd7 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
4b6dd7 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
4b6dd7 |
* Lesser General Public License for more details.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
4b6dd7 |
* License along with GData Client. If not, see <http://www.gnu.org/licenses/>.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* SECTION:gdata-freebase-service
|
|
Packit |
4b6dd7 |
* @short_description: GData Freebase service object
|
|
Packit |
4b6dd7 |
* @stability: Stable
|
|
Packit |
4b6dd7 |
* @include: gdata/services/freebase/gdata-freebase-service.h
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* #GDataFreebaseService is a subclass of #GDataService for communicating with the Google Freebase API. It supports queries
|
|
Packit |
4b6dd7 |
* in MQL format, that allows highly flexible queries on any topic. MQL is a JSON based query language, MQL requests consist
|
|
Packit |
4b6dd7 |
* of a mix of defined and empty values for types in the Freebase schema, those "placeholder" values will be filled in on the
|
|
Packit |
4b6dd7 |
* reply. For more information and examples, see the <ulink type="http" url="https://developers.google.com/freebase/v1/mql-overview">
|
|
Packit |
4b6dd7 |
* MQL overview page</ulink>.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* For more details of Google Freebase API, see the <ulink type="http" url="https://developers.google.com/freebase/v1/">
|
|
Packit |
4b6dd7 |
* online documentation</ulink>.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since August 2016, [Google has retired Freebase](https://developers.google.com/freebase/),
|
|
Packit |
4b6dd7 |
* so all of these APIs will return an error if used; and should be considered
|
|
Packit |
4b6dd7 |
* deprecated.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.15.1
|
|
Packit |
4b6dd7 |
* Deprecated: 0.17.7: Google Freebase has been permanently shut down.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
#include <config.h>
|
|
Packit |
4b6dd7 |
#include <glib.h>
|
|
Packit |
4b6dd7 |
#include <glib/gi18n-lib.h>
|
|
Packit |
4b6dd7 |
#include <string.h>
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
#include "gdata-freebase-service.h"
|
|
Packit |
4b6dd7 |
#include "gdata-freebase-result.h"
|
|
Packit |
4b6dd7 |
#include "gdata-freebase-search-result.h"
|
|
Packit |
4b6dd7 |
#include "gdata-service.h"
|
|
Packit |
4b6dd7 |
#include "gdata-private.h"
|
|
Packit |
4b6dd7 |
#include "gdata-query.h"
|
|
Packit |
4b6dd7 |
#include "gdata-feed.h"
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Standards reference at https://developers.google.com/freebase/v1/ */
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
#define URLBASE "://www.googleapis.com/freebase/v1"
|
|
Packit |
4b6dd7 |
#define IMAGE_URI_PREFIX "https://usercontent.googleapis.com/freebase/v1/image"
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
enum {
|
|
Packit |
4b6dd7 |
PROP_DEVELOPER_KEY = 1
|
|
Packit |
4b6dd7 |
};
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
struct _GDataFreebaseServicePrivate {
|
|
Packit |
4b6dd7 |
gchar *developer_key;
|
|
Packit |
4b6dd7 |
};
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
static void gdata_freebase_service_set_property (GObject *self, guint prop_id, const GValue *value, GParamSpec *pspec);
|
|
Packit |
4b6dd7 |
static void gdata_freebase_service_get_property (GObject *self, guint prop_id, GValue *value, GParamSpec *pspec);
|
|
Packit |
4b6dd7 |
static void gdata_freebase_service_finalize (GObject *self);
|
|
Packit |
4b6dd7 |
static void append_query_headers (GDataService *self, GDataAuthorizationDomain *domain, SoupMessage *message);
|
|
Packit |
4b6dd7 |
static GList *get_authorization_domains (void);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
_GDATA_DEFINE_AUTHORIZATION_DOMAIN (freebase, "freebase", "https://www.googleapis.com/auth/freebase.readonly")
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
G_DEFINE_TYPE (GDataFreebaseService, gdata_freebase_service, GDATA_TYPE_SERVICE)
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
static void
|
|
Packit |
4b6dd7 |
gdata_freebase_service_class_init (GDataFreebaseServiceClass *klass)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
|
Packit |
4b6dd7 |
GDataServiceClass *service_class = GDATA_SERVICE_CLASS (klass);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_type_class_add_private (klass, sizeof (GDataFreebaseServicePrivate));
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
gobject_class->set_property = gdata_freebase_service_set_property;
|
|
Packit |
4b6dd7 |
gobject_class->get_property = gdata_freebase_service_get_property;
|
|
Packit |
4b6dd7 |
gobject_class->finalize = gdata_freebase_service_finalize;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
service_class->append_query_headers = append_query_headers;
|
|
Packit |
4b6dd7 |
service_class->get_authorization_domains = get_authorization_domains;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* GDataFreebaseService:developer-key:
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* The developer key your application has registered with the Freebase API. For more information, see the
|
|
Packit |
4b6dd7 |
* url="https://developers.google.com/freebase/v1/how-tos/authorizing">online documentation</ulink>.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.15.1
|
|
Packit |
4b6dd7 |
* Deprecated: 0.17.7: Google Freebase has been permanently shut down.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
g_object_class_install_property (gobject_class, PROP_DEVELOPER_KEY,
|
|
Packit |
4b6dd7 |
g_param_spec_string ("developer-key",
|
|
Packit |
4b6dd7 |
"Developer key", "Your Freebase developer API key.",
|
|
Packit |
4b6dd7 |
NULL,
|
|
Packit |
4b6dd7 |
G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
|
|
Packit |
4b6dd7 |
G_PARAM_DEPRECATED));
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
static void
|
|
Packit |
4b6dd7 |
gdata_freebase_service_init (GDataFreebaseService *self)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GDATA_TYPE_FREEBASE_SERVICE, GDataFreebaseServicePrivate);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
static void
|
|
Packit |
4b6dd7 |
append_query_headers (GDataService *self, GDataAuthorizationDomain *domain, SoupMessage *message)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
GDataFreebaseServicePrivate *priv = GDATA_FREEBASE_SERVICE (self)->priv;
|
|
Packit |
4b6dd7 |
const gchar *query;
|
|
Packit |
4b6dd7 |
GString *new_query;
|
|
Packit |
4b6dd7 |
SoupURI *uri;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_assert (message != NULL);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (priv->developer_key) {
|
|
Packit |
4b6dd7 |
uri = soup_message_get_uri (message);
|
|
Packit |
4b6dd7 |
query = soup_uri_get_query (uri);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Set the key on every request, as per
|
|
Packit |
4b6dd7 |
* https://developers.google.com/freebase/v1/parameters
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
if (query) {
|
|
Packit |
4b6dd7 |
new_query = g_string_new (query);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_string_append (new_query, "&key=");
|
|
Packit |
4b6dd7 |
g_string_append_uri_escaped (new_query, priv->developer_key, NULL, FALSE);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
soup_uri_set_query (uri, new_query->str);
|
|
Packit |
4b6dd7 |
g_string_free (new_query, TRUE);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Chain up to the parent class */
|
|
Packit |
4b6dd7 |
GDATA_SERVICE_CLASS (gdata_freebase_service_parent_class)->append_query_headers (self, domain, message);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
static GList *
|
|
Packit |
4b6dd7 |
get_authorization_domains (void)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
return g_list_prepend (NULL, get_freebase_authorization_domain ());
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
static void
|
|
Packit |
4b6dd7 |
gdata_freebase_service_set_property (GObject *self, guint prop_id, const GValue *value, GParamSpec *pspec)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
GDataFreebaseServicePrivate *priv = GDATA_FREEBASE_SERVICE (self)->priv;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
switch (prop_id) {
|
|
Packit |
4b6dd7 |
case PROP_DEVELOPER_KEY:
|
|
Packit |
4b6dd7 |
priv->developer_key = g_value_dup_string (value);
|
|
Packit |
4b6dd7 |
break;
|
|
Packit |
4b6dd7 |
default:
|
|
Packit |
4b6dd7 |
G_OBJECT_WARN_INVALID_PROPERTY_ID (self, prop_id, pspec);
|
|
Packit |
4b6dd7 |
break;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
static void
|
|
Packit |
4b6dd7 |
gdata_freebase_service_get_property (GObject *self, guint prop_id, GValue *value, GParamSpec *pspec)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
GDataFreebaseServicePrivate *priv = GDATA_FREEBASE_SERVICE (self)->priv;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
switch (prop_id) {
|
|
Packit |
4b6dd7 |
case PROP_DEVELOPER_KEY:
|
|
Packit |
4b6dd7 |
g_value_set_string (value, priv->developer_key);
|
|
Packit |
4b6dd7 |
break;
|
|
Packit |
4b6dd7 |
default:
|
|
Packit |
4b6dd7 |
G_OBJECT_WARN_INVALID_PROPERTY_ID (self, prop_id, pspec);
|
|
Packit |
4b6dd7 |
break;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
static void
|
|
Packit |
4b6dd7 |
gdata_freebase_service_finalize (GObject *self)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
GDataFreebaseServicePrivate *priv = GDATA_FREEBASE_SERVICE (self)->priv;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_free (priv->developer_key);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
G_OBJECT_CLASS (gdata_freebase_service_parent_class)->finalize (self);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_freebase_service_new:
|
|
Packit |
4b6dd7 |
* @developer_key: (allow-none): developer key to use the API, or %NULL
|
|
Packit |
4b6dd7 |
* @authorizer: (allow-none): a #GDataAuthorizer to authorize the service's requests, or %NULL
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Creates a new #GDataFreebaseService using the given #GDataAuthorizer. If @authorizer is %NULL, all requests are made as an unauthenticated user.
|
|
Packit |
4b6dd7 |
* Having both @developer_key and @authorizer set to %NULL is allowed, but this should be reserved for debugging situations, as there is a certain
|
|
Packit |
4b6dd7 |
* key-less quota for those purposes. If this service is used on any code intended to be deployed, one or both of @developer_key and @authorizer
|
|
Packit |
4b6dd7 |
* should be non-%NULL and valid.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: (transfer full): a new #GDataFreebaseService; unref with g_object_unref()
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.15.1
|
|
Packit |
4b6dd7 |
* Deprecated: 0.17.7: Google Freebase has been permanently shut down.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
GDataFreebaseService *
|
|
Packit |
4b6dd7 |
gdata_freebase_service_new (const gchar *developer_key, GDataAuthorizer *authorizer)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (authorizer == NULL || GDATA_IS_AUTHORIZER (authorizer), NULL);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
return g_object_new (GDATA_TYPE_FREEBASE_SERVICE,
|
|
Packit |
4b6dd7 |
"developer-key", developer_key,
|
|
Packit |
4b6dd7 |
"authorizer", authorizer,
|
|
Packit |
4b6dd7 |
NULL);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_freebase_service_get_primary_authorization_domain:
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* The primary #GDataAuthorizationDomain for interacting with Freebase. This will not normally need to be used, as it's used internally
|
|
Packit |
4b6dd7 |
* by the #GDataFreebaseService methods. However, if using the plain #GDataService methods to implement custom queries or requests which libgdata
|
|
Packit |
4b6dd7 |
* does not support natively, then this domain may be needed to authorize the requests.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* The domain never changes, and is interned so that pointer comparison can be used to differentiate it from other authorization domains.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: (transfer none): the service's authorization domain
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.15.1
|
|
Packit |
4b6dd7 |
* Deprecated: 0.17.7: Google Freebase has been permanently shut down.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
GDataAuthorizationDomain *
|
|
Packit |
4b6dd7 |
gdata_freebase_service_get_primary_authorization_domain (void)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
return get_freebase_authorization_domain ();
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_freebase_service_query:
|
|
Packit |
4b6dd7 |
* @self: a #GDataFreebaseService
|
|
Packit |
4b6dd7 |
* @query: a #GDataFreebaseQuery with the MQL query
|
|
Packit |
4b6dd7 |
* @cancellable: (allow-none): optional #GCancellable object, or %NULL
|
|
Packit |
4b6dd7 |
* @error: (allow-none): a #GError, or %NULL
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Performs a MQL query on the service, you can find out more about MQL in the <ulink type="http" url="http://mql.freebaseapps.com/index.html">online MQL documentation</ulink>.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: (transfer full): a #GDataFreebaseResult containing the query result; unref with g_object_unref()
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.15.1
|
|
Packit |
4b6dd7 |
* Deprecated: 0.17.7: Google Freebase has been permanently shut down.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
GDataFreebaseResult *
|
|
Packit |
4b6dd7 |
gdata_freebase_service_query (GDataFreebaseService *self, GDataFreebaseQuery *query,
|
|
Packit |
4b6dd7 |
GCancellable *cancellable, GError **error)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
GDataEntry *entry;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_FREEBASE_SERVICE (self), NULL);
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_FREEBASE_QUERY (query), NULL);
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), NULL);
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
entry = gdata_service_query_single_entry (GDATA_SERVICE (self), get_freebase_authorization_domain (), "mqlread",
|
|
Packit |
4b6dd7 |
GDATA_QUERY (query), GDATA_TYPE_FREEBASE_RESULT, cancellable, error);
|
|
Packit |
4b6dd7 |
if (entry == NULL)
|
|
Packit |
4b6dd7 |
return NULL;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
return GDATA_FREEBASE_RESULT (entry);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_freebase_service_query_async:
|
|
Packit |
4b6dd7 |
* @self: a #GDataFreebaseService
|
|
Packit |
4b6dd7 |
* @query: a #GDataFreebaseQuery with the MQL query
|
|
Packit |
4b6dd7 |
* @cancellable: (allow-none): optional #GCancellable object, or %NULL
|
|
Packit |
4b6dd7 |
* @callback: a #GAsyncReadyCallback to call when authentication is finished
|
|
Packit |
4b6dd7 |
* @user_data: (closure): data to pass to the @callback function
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Performs a MQL query on the service. @self and @query are all reffed when this function is called, so can safely
|
|
Packit |
4b6dd7 |
* be unreffed after this function returns. When the query is replied, or fails, @callback will be executed, and
|
|
Packit |
4b6dd7 |
* the result can be obtained through gdata_service_query_single_entry_finish().
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* For more details, see gdata_freebase_service_query(), which is the synchronous version of
|
|
Packit |
4b6dd7 |
* this function.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.15.1
|
|
Packit |
4b6dd7 |
* Deprecated: 0.17.7: Google Freebase has been permanently shut down.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
void
|
|
Packit |
4b6dd7 |
gdata_freebase_service_query_async (GDataFreebaseService *self, GDataFreebaseQuery *query, GCancellable *cancellable,
|
|
Packit |
4b6dd7 |
GAsyncReadyCallback callback, gpointer user_data)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_if_fail (GDATA_IS_FREEBASE_SERVICE (self));
|
|
Packit |
4b6dd7 |
g_return_if_fail (GDATA_IS_FREEBASE_QUERY (query));
|
|
Packit |
4b6dd7 |
g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
|
|
Packit |
4b6dd7 |
g_return_if_fail (callback != NULL);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
gdata_service_query_single_entry_async (GDATA_SERVICE (self), get_freebase_authorization_domain (), "mqlread",
|
|
Packit |
4b6dd7 |
GDATA_QUERY (query), GDATA_TYPE_FREEBASE_RESULT, cancellable, callback, user_data);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_freebase_service_get_topic:
|
|
Packit |
4b6dd7 |
* @self: a #GDataFreebaseService
|
|
Packit |
4b6dd7 |
* @query: a #GDataFreebaseTopicQuery containing the topic ID
|
|
Packit |
4b6dd7 |
* @cancellable: (allow-none): optional #GCancellable object, or %NULL
|
|
Packit |
4b6dd7 |
* @error: (allow-none): a #GError, or %NULL
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Queries information about a topic, identified through a Freebase ID. You can find out more about topic queries in the
|
|
Packit |
4b6dd7 |
* <ulink type="http" url="https://developers.google.com/freebase/v1/topic-response">online documentation</ulink>.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: (transfer full): a #GDataFreebaseTopicResult containing information about the topic; unref with g_object_unref()
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.15.1
|
|
Packit |
4b6dd7 |
* Deprecated: 0.17.7: Google Freebase has been permanently shut down.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
GDataFreebaseTopicResult *
|
|
Packit |
4b6dd7 |
gdata_freebase_service_get_topic (GDataFreebaseService *self, GDataFreebaseTopicQuery *query, GCancellable *cancellable, GError **error)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
GDataEntry *entry;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_FREEBASE_SERVICE (self), NULL);
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_FREEBASE_TOPIC_QUERY (query), NULL);
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), NULL);
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
entry = gdata_service_query_single_entry (GDATA_SERVICE (self), get_freebase_authorization_domain (), "topic",
|
|
Packit |
4b6dd7 |
GDATA_QUERY (query), GDATA_TYPE_FREEBASE_TOPIC_RESULT, cancellable, error);
|
|
Packit |
4b6dd7 |
if (entry == NULL)
|
|
Packit |
4b6dd7 |
return NULL;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
return GDATA_FREEBASE_TOPIC_RESULT (entry);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_freebase_service_get_topic_async:
|
|
Packit |
4b6dd7 |
* @self: a #GDataFreebaseService
|
|
Packit |
4b6dd7 |
* @query: a #GDataFreebaseQuery with the MQL query
|
|
Packit |
4b6dd7 |
* @cancellable: (allow-none): optional #GCancellable object, or %NULL
|
|
Packit |
4b6dd7 |
* @callback: a #GAsyncReadyCallback to call when authentication is finished
|
|
Packit |
4b6dd7 |
* @user_data: (closure): data to pass to the @callback function
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Queries information about a topic, identified through a Freebase ID. @self and @query are all reffed when this
|
|
Packit |
4b6dd7 |
* function is called, so can safely be unreffed after this function returns. When the query is replied, or fails,
|
|
Packit |
4b6dd7 |
* @callback will be executed, and the result can be obtained through gdata_service_query_single_entry_finish().
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* For more details, see gdata_freebase_service_get_topic(), which is the synchronous version of
|
|
Packit |
4b6dd7 |
* this function.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.15.1
|
|
Packit |
4b6dd7 |
* Deprecated: 0.17.7: Google Freebase has been permanently shut down.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
void
|
|
Packit |
4b6dd7 |
gdata_freebase_service_get_topic_async (GDataFreebaseService *self, GDataFreebaseTopicQuery *query,
|
|
Packit |
4b6dd7 |
GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_if_fail (GDATA_IS_FREEBASE_SERVICE (self));
|
|
Packit |
4b6dd7 |
g_return_if_fail (GDATA_IS_FREEBASE_TOPIC_QUERY (query));
|
|
Packit |
4b6dd7 |
g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
|
|
Packit |
4b6dd7 |
g_return_if_fail (callback != NULL);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
gdata_service_query_single_entry_async (GDATA_SERVICE (self), get_freebase_authorization_domain (), "topic",
|
|
Packit |
4b6dd7 |
GDATA_QUERY (query), GDATA_TYPE_FREEBASE_TOPIC_RESULT, cancellable, callback, user_data);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_freebase_service_search:
|
|
Packit |
4b6dd7 |
* @self: a #GDataFreebaseService
|
|
Packit |
4b6dd7 |
* @query: a #GDataFreebaseSearchQuery containing the topic ID
|
|
Packit |
4b6dd7 |
* @cancellable: (allow-none): optional #GCancellable object, or %NULL
|
|
Packit |
4b6dd7 |
* @error: (allow-none): a #GError, or %NULL
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Performs a search for any given search term, filters can be set on @query to narrow down the results. The results returned
|
|
Packit |
4b6dd7 |
* are ordered by relevance. You can find out more about topic queries in the
|
|
Packit |
4b6dd7 |
* <ulink type="http" url="https://developers.google.com/freebase/v1/search-cookbook">online documentation</ulink>.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: (transfer full): a #GDataFreebaseSearchResult containing the results for the given search query; unref with g_object_unref()
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.15.1
|
|
Packit |
4b6dd7 |
* Deprecated: 0.17.7: Google Freebase has been permanently shut down.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
GDataFreebaseSearchResult *
|
|
Packit |
4b6dd7 |
gdata_freebase_service_search (GDataFreebaseService *self, GDataFreebaseSearchQuery *query, GCancellable *cancellable, GError **error)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
GDataEntry *entry;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_FREEBASE_SERVICE (self), NULL);
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_FREEBASE_SEARCH_QUERY (query), NULL);
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), NULL);
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
entry = gdata_service_query_single_entry (GDATA_SERVICE (self), get_freebase_authorization_domain (), "search",
|
|
Packit |
4b6dd7 |
GDATA_QUERY (query), GDATA_TYPE_FREEBASE_SEARCH_RESULT, cancellable, error);
|
|
Packit |
4b6dd7 |
if (entry == NULL)
|
|
Packit |
4b6dd7 |
return NULL;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
return GDATA_FREEBASE_SEARCH_RESULT (entry);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_freebase_service_search_async:
|
|
Packit |
4b6dd7 |
* @self: a #GDataFreebaseService
|
|
Packit |
4b6dd7 |
* @query: a #GDataFreebaseQuery with the MQL query
|
|
Packit |
4b6dd7 |
* @cancellable: (allow-none): optional #GCancellable object, or %NULL
|
|
Packit |
4b6dd7 |
* @callback: a #GAsyncReadyCallback to call when authentication is finished
|
|
Packit |
4b6dd7 |
* @user_data: (closure): data to pass to the @callback function
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Performs a search for any given search term. @self and @query are all reffed when this
|
|
Packit |
4b6dd7 |
* function is called, so can safely be unreffed after this function returns.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* For more details, see gdata_freebase_service_search(), which is the synchronous version of
|
|
Packit |
4b6dd7 |
* this function.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.15.1
|
|
Packit |
4b6dd7 |
* Deprecated: 0.17.7: Google Freebase has been permanently shut down.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
void
|
|
Packit |
4b6dd7 |
gdata_freebase_service_search_async (GDataFreebaseService *self, GDataFreebaseSearchQuery *query,
|
|
Packit |
4b6dd7 |
GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_if_fail (GDATA_IS_FREEBASE_SERVICE (self));
|
|
Packit |
4b6dd7 |
g_return_if_fail (GDATA_IS_FREEBASE_SEARCH_QUERY (query));
|
|
Packit |
4b6dd7 |
g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
|
|
Packit |
4b6dd7 |
g_return_if_fail (callback != NULL);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
gdata_service_query_single_entry_async (GDATA_SERVICE (self), get_freebase_authorization_domain (), "search",
|
|
Packit |
4b6dd7 |
GDATA_QUERY (query), GDATA_TYPE_FREEBASE_SEARCH_RESULT, cancellable, callback, user_data);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
static gchar *
|
|
Packit |
4b6dd7 |
compose_image_uri (GDataFreebaseTopicValue *value, guint max_width, guint max_height)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
GString *uri = g_string_new (IMAGE_URI_PREFIX);
|
|
Packit |
4b6dd7 |
const GDataFreebaseTopicObject *object;
|
|
Packit |
4b6dd7 |
gboolean first = TRUE;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
object = gdata_freebase_topic_value_get_object (value);
|
|
Packit |
4b6dd7 |
g_assert (object != NULL);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_string_append (uri, gdata_freebase_topic_object_get_id (object));
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
#define APPEND_SEP g_string_append_c (uri, first ? '?' : '&';; first = FALSE;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (max_width > 0) {
|
|
Packit |
4b6dd7 |
APPEND_SEP;
|
|
Packit |
4b6dd7 |
g_string_append_printf (uri, "maxwidth=%d", max_width);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (max_height > 0) {
|
|
Packit |
4b6dd7 |
APPEND_SEP;
|
|
Packit |
4b6dd7 |
g_string_append_printf (uri, "maxheight=%d", max_height);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
#undef APPEND_SEP
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
return g_string_free (uri, FALSE);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_freebase_service_get_image:
|
|
Packit |
4b6dd7 |
* @self: a #GDataFreebaseService
|
|
Packit |
4b6dd7 |
* @value: a #GDataFreebaseTopicValue from a topic result
|
|
Packit |
4b6dd7 |
* @cancellable: (allow-none): optional #GCancellable object, or %NULL
|
|
Packit |
4b6dd7 |
* @max_width: maximum width of the image returned, or 0
|
|
Packit |
4b6dd7 |
* @max_height: maximum height of the image returned, or 0
|
|
Packit |
4b6dd7 |
* @error: (allow-none): a #GError, or %NULL
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Creates an input stream to an image object returned in a topic query. If @max_width and @max_height
|
|
Packit |
4b6dd7 |
* are unspecified (i.e. set to 0), the image returned will be the smallest available.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: (transfer full): a #GInputStream opened to the image; unref with g_object_unref()
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.15.1
|
|
Packit |
4b6dd7 |
* Deprecated: 0.17.7: Google Freebase has been permanently shut down.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
GInputStream *
|
|
Packit |
4b6dd7 |
gdata_freebase_service_get_image (GDataFreebaseService *self, GDataFreebaseTopicValue *value,
|
|
Packit |
4b6dd7 |
GCancellable *cancellable, guint max_width, guint max_height, GError **error)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
GInputStream *stream;
|
|
Packit |
4b6dd7 |
gchar *uri;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_FREEBASE_SERVICE (self), NULL);
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), NULL);
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (value != NULL, NULL);
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (!error || !*error, NULL);
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (max_width < 4096 && max_height < 4096, NULL);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (!gdata_freebase_topic_value_is_image (value)) {
|
|
Packit |
4b6dd7 |
g_set_error (error,
|
|
Packit |
4b6dd7 |
GDATA_SERVICE_ERROR,
|
|
Packit |
4b6dd7 |
GDATA_SERVICE_ERROR_BAD_QUERY_PARAMETER,
|
|
Packit |
4b6dd7 |
_("Property ā%sā does not hold an image"),
|
|
Packit |
4b6dd7 |
gdata_freebase_topic_value_get_property (value));
|
|
Packit |
4b6dd7 |
return NULL;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
uri = compose_image_uri (value, max_width, max_height);
|
|
Packit |
4b6dd7 |
stream = gdata_download_stream_new (GDATA_SERVICE (self), get_freebase_authorization_domain (), uri, cancellable);
|
|
Packit |
4b6dd7 |
g_free (uri);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
return stream;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
G_GNUC_END_IGNORE_DEPRECATIONS
|