![]() |
![]() |
![]() |
![]() |
Example 1. search-photos.c
: Search for my interesting photos with a given tag and print the resulting photo IDs
#include <stdio.h> #include <string.h> #include <unistd.h> #include <errno.h> #include <flickcurl.h> static const char* program; static const char* my_basename(const char *name) { char *p; if((p = strrchr(name, '/'))) name = p+1; else if((p = strrchr(name, '\\'))) name = p+1; return name; } static void my_message_handler(void *user_data, const char *message) { fprintf(stderr, "%s: ERROR: %s\n", program, message); } static const char* config_filename = ".flickcurl.conf"; static const char* config_section = "flickr"; int main(int argc, char *argv[]) { flickcurl *fc = NULL; int rc = 0; const char* home; char config_path[1024]; char* tag = NULL; flickcurl_photos_list_params list_params; flickcurl_search_params params; flickcurl_photos_list* photos_list = NULL; int i; program = my_basename(argv[0]); flickcurl_init(); home = getenv("HOME"); if(home) sprintf(config_path, "%s/%s", home, config_filename); else strcpy(config_path, config_filename); if(argc != 2) { fprintf(stderr, "%s: No tag given\n" "Try `%s -h for more information.\n", program, program); rc = 1; goto tidy; } if(!strcmp(argv[1], "-h")) { printf("%s - search for my interesting photos about a tag\n" "Usage: %s TAG\n\n", program, program); fputs("Flickcurl home page: ", stdout); puts(flickcurl_home_url_string); puts(flickcurl_copyright_string); fputs("License: ", stdout); puts(flickcurl_license_string); rc = 1; goto tidy; } tag = argv[1]; /* Initialise the Flickcurl library */ fc = flickcurl_new(); if(!fc) { rc = 1; goto tidy; } flickcurl_set_error_handler(fc, my_message_handler, NULL); if(!access((const char*)config_path, R_OK)) { if(flickcurl_config_read_ini(fc, config_path, config_section, fc, flickcurl_config_var_handler)) { fprintf(stderr, "%s: Failed to read config filename %s: %s\n", program, config_path, strerror(errno)); rc = 1; goto tidy; } } /* Initialise the search parameters themselves * user_id: "me" - Search only photos of the calling user. * sort: "interestingness-desc" - return results with most interesting first * tag: TAG - search for photos about the TAG given on the command line */ flickcurl_search_params_init(¶ms); /* these strings are shared and not strdup()ed since they are stored * in 'params" on the stack */ params.user_id = (char*)"me"; params.sort = (char*)"interestingness-desc"; params.tags = tag; /* Initialise the search result (list) parameters: * per_page: 10 - ten results per-page * page: 1 - return 1 page * extras: "original_format" - want the returned photos to have the * original secret and format fields. */ flickcurl_photos_list_params_init(&list_params); list_params.per_page = 10; list_params.page = 1; /* this string is shared and not strdup()ed since it is stored * in 'list_params" on the stack */ list_params.extras = "original_format"; photos_list = flickcurl_photos_search_params(fc, ¶ms, &list_params); if(!photos_list) goto tidy; fprintf(stderr, "%s: Search returned %d photos\n", program, photos_list->photos_count); for(i = 0; i < photos_list->photos_count; ++i) printf(" Result #%d has ID %s\n", i, photos_list->photos[i]->id); tidy: if(photos_list) flickcurl_free_photos_list(photos_list); if(fc) flickcurl_free(fc); flickcurl_finish(); return(rc); }
Compile it like this:
$ gcc -o search-photos search-photos.c `pkg-config flickcurl --cflags --libs`
and assuming the flickcurl API configuration has already been created
in ~/.flickcurl.conf
, run the program like this:
$ ./search-photos kitten search-photos: Search returned 2 photos Result #0 has ID 1234567890 Result #1 has ID 2345678901
Your kitten results may vary.