From d6ddcbfe28f236f3f6a17fd980f03b2306135ec8 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Tue, 14 Apr 2015 00:50:19 +0100 Subject: demos: Add youtube-cli demo This is a simple demo to search for YouTube videos on the command line. --- Makefile.am | 29 +++++++++++- demos/youtube/youtube-cli.c | 111 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 139 insertions(+), 1 deletion(-) create mode 100644 demos/youtube/youtube-cli.c diff --git a/Makefile.am b/Makefile.am index db6d8528..964ac4b6 100644 --- a/Makefile.am +++ b/Makefile.am @@ -615,7 +615,7 @@ CODE_COVERAGE_DIRECTORY = $(top_builddir)/gdata CODE_COVERAGE_LCOV_OPTIONS = --base-directory $(abs_top_srcdir) # Demo programs -noinst_PROGRAMS = +noinst_PROGRAMS = demos/youtube/youtube-cli if ENABLE_GOA noinst_PROGRAMS += demos/docs-list/docs-list @@ -711,6 +711,33 @@ demos_freebase_freebase_cli_LDADD = \ $(AM_LDADD) \ $(NULL) +demos_youtube_youtube_cli_SOURCES = \ + demos/youtube/youtube-cli.c \ + $(NULL) + +demos_youtube_youtube_cli_CPPFLAGS = \ + -I$(top_srcdir)/ \ + -I$(top_srcdir)/gdata \ + -DG_LOG_DOMAIN=\"youtube\" \ + -DLIBGDATA_DISABLE_DEPRECATED \ + $(DISABLE_DEPRECATED) \ + $(AM_CPPFLAGS) \ + $(NULL) + +demos_youtube_youtube_cli_CFLAGS = \ + $(WARN_CFLAGS) \ + $(GDATA_CFLAGS) \ + $(GNOME_CFLAGS) \ + $(AM_CFLAGS) \ + $(NULL) + +demos_youtube_youtube_cli_LDADD = \ + $(top_builddir)/gdata/libgdata.la \ + $(GDATA_LIBS) \ + $(GNOME_LIBS) \ + $(AM_LDADD) \ + $(NULL) + # Cleaning EXTRA_DIST += \ autogen.sh \ diff --git a/demos/youtube/youtube-cli.c b/demos/youtube/youtube-cli.c new file mode 100644 index 00000000..7bb23b4e --- /dev/null +++ b/demos/youtube/youtube-cli.c @@ -0,0 +1,111 @@ +/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ +/* + * GData Client + * Copyright (C) 2015 Philip Withnall + * + * GData Client is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * GData Client is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with GData Client. If not, see . + */ + +#include +#include +#include + +#define DEVELOPER_KEY "AI39si7Me3Q7zYs6hmkFvpRBD2nrkVjYYsUO5lh_3HdOkGRc9g6Z4nzxZatk_aAo2EsA21k7vrda0OO6oFg2rnhMedZXPyXoEw" + +static int +print_usage (char *argv[]) +{ + g_printerr ("%s: Usage — %s search \n", argv[0], argv[0]); + return -1; +} + +static int +command_search (char *argv[]) +{ + GDataYouTubeService *service = NULL; + GDataYouTubeQuery *query = NULL; + GDataFeed *feed = NULL; + GList *entries; + GError *error = NULL; + gint retval = 0; + + service = gdata_youtube_service_new (DEVELOPER_KEY, NULL); + query = gdata_youtube_query_new (argv[2]); + feed = gdata_youtube_service_query_videos (service, GDATA_QUERY (query), + NULL, NULL, NULL, &error); + + if (error != NULL) { + g_printerr ("%s: Error querying YouTube: %s\n", + argv[0], error->message); + g_error_free (error); + retval = 1; + goto done; + } + + /* Print results. */ + for (entries = gdata_feed_get_entries (feed); entries != NULL; + entries = entries->next) { + GDataYouTubeVideo *video; + const gchar *title, *player_uri; + + video = GDATA_YOUTUBE_VIDEO (entries->data); + title = gdata_entry_get_title (GDATA_ENTRY (video)); + player_uri = gdata_youtube_video_get_player_uri (video); + + g_print ("%s — %s\n", player_uri, title); + } + + if (gdata_feed_get_entries (feed) == NULL) { + g_print ("No results.\n"); + } + +done: + g_clear_object (&feed); + g_clear_object (&query); + g_clear_object (&service); + + return retval; +} + +static const struct { + const gchar *command; + int (*handler_fn) (char **argv); +} command_handlers[] = { + { "search", command_search }, +}; + +int +main (int argc, char *argv[]) +{ + guint i; + gint retval = -1; + + setlocale (LC_ALL, ""); + + if (argc < 3) { + return print_usage (argv); + } + + for (i = 0; i < G_N_ELEMENTS (command_handlers); i++) { + if (strcmp (argv[1], command_handlers[i].command) == 0) { + retval = command_handlers[i].handler_fn (argv); + } + } + + if (retval == -1) { + retval = print_usage (argv); + } + + return retval; +} -- cgit v1.2.1