flickcurl.h   flickcurl.h 
/* -*- Mode: c; c-basic-offset: 2 -*- /* -*- Mode: c; c-basic-offset: 2 -*-
* *
* flickcurl.h - Flickcurl API * flickcurl.h - Flickcurl API
* *
* Copyright (C) 2007, David Beckett http://purl.org/net/dajobe/ * Copyright (C) 2007-2008, David Beckett http://www.dajobe.org/
* *
* This file is licensed under the following three licenses as alternatives : * This file is licensed under the following three licenses as alternatives :
* 1. GNU Lesser General Public License (LGPL) V2.1 or any newer version * 1. GNU Lesser General Public License (LGPL) V2.1 or any newer version
* 2. GNU General Public License (GPL) V2 or any newer version * 2. GNU General Public License (GPL) V2 or any newer version
* 3. Apache License, V2.0 or any newer version * 3. Apache License, V2.0 or any newer version
* *
* You may not use this file except in compliance with at least one of * You may not use this file except in compliance with at least one of
* the above three licenses. * the above three licenses.
* *
* See LICENSE.html or LICENSE.txt at the top of this package for the * See LICENSE.html or LICENSE.txt at the top of this package for the
skipping to change at line 101 skipping to change at line 101
PHOTO_FIELD_owner_realname, PHOTO_FIELD_owner_realname,
PHOTO_FIELD_owner_username, PHOTO_FIELD_owner_username,
PHOTO_FIELD_title, PHOTO_FIELD_title,
PHOTO_FIELD_visibility_isfamily, PHOTO_FIELD_visibility_isfamily,
PHOTO_FIELD_visibility_isfriend, PHOTO_FIELD_visibility_isfriend,
PHOTO_FIELD_visibility_ispublic, PHOTO_FIELD_visibility_ispublic,
PHOTO_FIELD_secret, PHOTO_FIELD_secret,
PHOTO_FIELD_originalsecret, PHOTO_FIELD_originalsecret,
PHOTO_FIELD_location_neighborhood, PHOTO_FIELD_location_neighborhood,
PHOTO_FIELD_location_locality, PHOTO_FIELD_location_locality,
PHOTO_FIELD_location_county,
PHOTO_FIELD_location_region, PHOTO_FIELD_location_region,
PHOTO_FIELD_location_country, PHOTO_FIELD_location_country,
PHOTO_FIELD_location_placeid,
PHOTO_FIELD_neighborhood_placeid,
PHOTO_FIELD_locality_placeid,
PHOTO_FIELD_county_placeid,
PHOTO_FIELD_region_placeid,
PHOTO_FIELD_country_placeid,
PHOTO_FIELD_FIRST = PHOTO_FIELD_dateuploaded, PHOTO_FIELD_FIRST = PHOTO_FIELD_dateuploaded,
PHOTO_FIELD_LAST = PHOTO_FIELD_location_country, PHOTO_FIELD_LAST = PHOTO_FIELD_country_placeid,
} flickcurl_photo_field_type; } flickcurl_photo_field_type;
/* The main object type */ /* The main object type */
typedef struct flickcurl_s flickcurl; typedef struct flickcurl_s flickcurl;
/* Forward structure references */ /* Forward structure references */
struct flickcurl_s; struct flickcurl_s;
struct flickcurl_photo_s; struct flickcurl_photo_s;
/** /**
skipping to change at line 154 skipping to change at line 161
char *response; char *response;
char *explanation; char *explanation;
/* argument list */ /* argument list */
flickcurl_arg** args; flickcurl_arg** args;
int args_count; int args_count;
} flickcurl_method; } flickcurl_method;
/** /**
* flickcurl_activity_event:
*
* Comment or photo activity event
*/
typedef struct {
char *type; /* comment or note */
char *id;
char *user;
char *username;
char *value;
int date_added;
} flickcurl_activity_event;
#define FLICKCURL_MAX_ACTIVITY_EVENTS 20
/**
* flickcurl_activity:
*
* Comments or photos item with activity
*/
typedef struct {
char *type; /* photoset or photo */
char *owner;
char *owner_name;
char *primary;
/* photo info: ID/secret/server/farm */
char *id;
char *secret;
int server;
int farm;
/* counts */
int comments_old;
int comments_new;
int notes_old;
int notes_new;
int views;
int comments;
int photos;
int faves;
/* flags */
int more;
char* title;
/* Array of events on this item */
flickcurl_activity_event* events[FLICKCURL_MAX_ACTIVITY_EVENTS+1];
} flickcurl_activity;
/**
* flickcurl_comment: * flickcurl_comment:
* @name: Argument name * @name: Argument name
* @optional: boolean flag (non-0 true) if argument is optional * @optional: boolean flag (non-0 true) if argument is optional
* @description: description of argument (HTML) * @description: description of argument (HTML)
* *
* An API method argument. * A photo comment.
*/ */
typedef struct flickcurl_comment_s { typedef struct flickcurl_comment_s {
char* id; char* id;
char* author; char* author;
char* authorname; char* authorname;
int datecreate; int datecreate;
char* permalink; char* permalink;
char* text; char* text;
} flickcurl_comment; } flickcurl_comment;
skipping to change at line 183 skipping to change at line 241
* @is_contact: * @is_contact:
* @is_friend: non-0 to make the photo visible to friends when private * @is_friend: non-0 to make the photo visible to friends when private
* @is_family: non-0 to make the photo visible to family when private * @is_family: non-0 to make the photo visible to family when private
* @perm_comment: who can add comments to the photo and it's notes. one of: 0 nobody, 1 friends & family, 2 contacts, 3 everybody * @perm_comment: who can add comments to the photo and it's notes. one of: 0 nobody, 1 friends & family, 2 contacts, 3 everybody
* @perm_addmeta: who can add notes and tags to the photo. one of: 0 nobody / just the owner, 1 friends & family, 2 contacts, 3 everybody * @perm_addmeta: who can add notes and tags to the photo. one of: 0 nobody / just the owner, 1 friends & family, 2 contacts, 3 everybody
* *
* Permissions as used by flickcurl_photos_getPerms() and * Permissions as used by flickcurl_photos_getPerms() and
* flickcurl_photos_setPerms() which use public, friend, family, * flickcurl_photos_setPerms() which use public, friend, family,
* perm_comment and perm-addmeta. flickr.photos.geo.setPerms() uses * perm_comment and perm-addmeta. flickr.photos.geo.setPerms() uses
* public, contact, friend and family. * public, contact, friend and family.
*
* A Photo permission.
*/ */
typedef struct typedef struct
{ {
int is_public; int is_public;
int is_contact; int is_contact;
int is_friend; int is_friend;
int is_family; int is_family;
int perm_comment; int perm_comment;
int perm_addmeta; int perm_addmeta;
} flickcurl_perms; } flickcurl_perms;
/** /**
* flickcurl_location: * flickcurl_location:
* @latitude: The latitude from -90 to 90 * @latitude: The latitude from -90 to 90
* @longitude: The longitude from -180 to 180 * @longitude: The longitude from -180 to 180
* @accuracy: Recorded accuracy level of the location. * @accuracy: Recorded accuracy level of the location.
* World level is 1, Country is ~3, Region ~6, City ~11, Street * World level is 1, Country is ~3, Region ~6, City ~11, Street
* ~16. Current range is 1-16. Defaults to 16 if not specified. (<0 for n one) * ~16. Current range is 1-16. Defaults to 16 if not specified. (<0 for n one)
*
* A Photo Location.
*/ */
typedef struct typedef struct
{ {
double latitude; double latitude;
double longitude; double longitude;
int accuracy; int accuracy;
} flickcurl_location; } flickcurl_location;
typedef enum {
FLICKCURL_PLACE_LOCATION,
FLICKCURL_PLACE_NEIGHBORHOOD,
FLICKCURL_PLACE_LOCALITY,
FLICKCURL_PLACE_COUNTY,
FLICKCURL_PLACE_REGION,
FLICKCURL_PLACE_COUNTRY,
FLICKCURL_PLACE_LAST = FLICKCURL_PLACE_COUNTRY
} flickcurl_place_type;
/**
* flickcurl_place:
* @names: Array of place names
* @ids: Array of place IDs
* @urls: Array of place urls.
*
* A Place.
*
* Index 0 in the array is the location itself. flickcurl_get_place_type_la
bel()
* returns labels for the array indexes of type #flickcurl_place_type.
*
*/
typedef struct
{
char* names[FLICKCURL_PLACE_LAST+1];
char* ids[FLICKCURL_PLACE_LAST+1];
char* urls[FLICKCURL_PLACE_LAST+1];
} flickcurl_place;
/** /**
* flickcurl_tag: * flickcurl_tag:
* @photo: Associated photo object if any * @photo: Associated photo object if any
* @id: tag identifier * @id: tag identifier
* @author: author (may be NULL) * @author: author (may be NULL)
* @authornamae: author real name (may be NULL) * @authornamae: author real name (may be NULL)
* @raw: raw tag as user typed it (may be NULL, but if so @cooked must be n ot NULL) * @raw: raw tag as user typed it (may be NULL, but if so @cooked must be n ot NULL)
* @cooked: cooked tag (may be NULL, but if so @raw must not be NULL) * @cooked: cooked tag (may be NULL, but if so @raw must not be NULL)
* @machine_tag: boolean (non-0 true) if tag is a Machine Tag * @machine_tag: boolean (non-0 true) if tag is a Machine Tag
* @count: tag count in a histogram (or 0) * @count: tag count in a histogram (or 0)
* *
* A tag OR a posting of a tag about a photo by a user OR a tag in a histog ram * A tag OR a posting of a tag about a photo by a user OR a tag in a histog ram
* *
* Most of these fields may be NULL, 0 for numbers * Most of these fields may be NULL, 0 for numbers
* but not all. Either @raw or @cooked MUST appear. * but not all. Either @raw or @cooked MUST appear.
*
* A Photo Tag.
*/ */
typedef struct flickcurl_tag_s { typedef struct flickcurl_tag_s {
struct flickcurl_photo_s* photo; struct flickcurl_photo_s* photo;
char* id; char* id;
char* author; char* author;
char* authorname; char* authorname;
char* raw; char* raw;
char* cooked; char* cooked;
int machine_tag; int machine_tag;
int count; int count;
skipping to change at line 249 skipping to change at line 342
flickcurl_field_value_type type; flickcurl_field_value_type type;
} flickcurl_photo_field; } flickcurl_photo_field;
/** /**
* flickcurl_photo: * flickcurl_photo:
* @id: photo ID * @id: photo ID
* @uri: photo page URI * @uri: photo page URI
* @tags: array of tags (may be NULL) * @tags: array of tags (may be NULL)
* @tags_count: size of tags array * @tags_count: size of tags array
* @fields: photo fields * @fields: photo fields
* @place: photot place
* *
* A photo. * A photo.
* *
*/ */
typedef struct flickcurl_photo_s { typedef struct flickcurl_photo_s {
char *id; char *id;
char *uri; char *uri;
flickcurl_tag** tags; flickcurl_tag** tags;
int tags_count; int tags_count;
flickcurl_photo_field fields[PHOTO_FIELD_LAST + 1]; flickcurl_photo_field fields[PHOTO_FIELD_LAST + 1];
flickcurl_place* place;
} flickcurl_photo; } flickcurl_photo;
/** /**
* flickcurl_license: * flickcurl_license:
* @id: license ID * @id: license ID
* @url: license URL * @url: license URL
* @name: license short name * @name: license short name
* *
* A photo license. * A photo license.
* *
skipping to change at line 383 skipping to change at line 479
int privacy; int privacy;
int photos; int photos;
int iconserver; int iconserver;
int members; int members;
int throttle_count; int throttle_count;
char* throttle_mode; char* throttle_mode;
int throttle_remaining; int throttle_remaining;
} flickcurl_group; } flickcurl_group;
/** /**
* flickcurl_blog:
* @id: ID
* @name: Group Name
* @needspassword: needs password
* @url: URL
*
* A blog.
*/
typedef struct {
char* id;
char* name;
int needs_password;
char* url;
} flickcurl_blog;
/**
* flickcurl_category: * flickcurl_category:
* @id: category ID * @id: category ID
* @name: Name * @name: Name
* @path: path to category * @path: path to category
* @count: count * @count: count
* *
* A category. * A category.
*/ */
struct flickcurl_category_s { struct flickcurl_category_s {
char* id; char* id;
skipping to change at line 514 skipping to change at line 626
* @bbox: A comma-delimited list of 4 values defining the Bounding Box of t he area that will be searched. * @bbox: A comma-delimited list of 4 values defining the Bounding Box of t he area that will be searched.
* @accuracy: Recorded accuracy level of the location information. Current range is 1-16 * @accuracy: Recorded accuracy level of the location information. Current range is 1-16
* @safe_search: Safe search setting: 1 safe, 2 moderate, 3 restricted. * @safe_search: Safe search setting: 1 safe, 2 moderate, 3 restricted.
* @content_type: Content Type setting: 1 for photos only, 2 for screenshot s only, 3 for 'other' only, 4 for all types. (or NULL) * @content_type: Content Type setting: 1 for photos only, 2 for screenshot s only, 3 for 'other' only, 4 for all types. (or NULL)
* @machine_tags: Machine tag search syntax * @machine_tags: Machine tag search syntax
* @machine_tag_mode: Either 'any' for an OR combination of tags, or 'all' for an AND combination. Defaults to 'any' if not specified. * @machine_tag_mode: Either 'any' for an OR combination of tags, or 'all' for an AND combination. Defaults to 'any' if not specified.
* @group_id: The id of a group who's pool to search. If specified, only m atching photos posted to the group's pool will be returned. (or NULL) * @group_id: The id of a group who's pool to search. If specified, only m atching photos posted to the group's pool will be returned. (or NULL)
* @extras: A comma-delimited list of extra information to fetch for each r eturned record. Currently supported fields are: <code>license</code>, <code >date_upload</code>, <code>date_taken</code>, <code>owner_name</code>, <cod e>icon_server</code>, <code>original_format</code>, <code>last_update</code >, <code>geo</code>, <code>tags</code>, <code>machine_tags</code>. (or NULL ) * @extras: A comma-delimited list of extra information to fetch for each r eturned record. Currently supported fields are: <code>license</code>, <code >date_upload</code>, <code>date_taken</code>, <code>owner_name</code>, <cod e>icon_server</code>, <code>original_format</code>, <code>last_update</code >, <code>geo</code>, <code>tags</code>, <code>machine_tags</code>. (or NULL )
* @per_page: Number of photos to return per page. If this argument is omit ted, it defaults to 100. The maximum allowed value is 500. (or NULL) * @per_page: Number of photos to return per page. If this argument is omit ted, it defaults to 100. The maximum allowed value is 500. (or NULL)
* @page: The page of results to return. If this argument is omitted, it de faults to 1. (or NULL) * @page: The page of results to return. If this argument is omitted, it de faults to 1. (or NULL)
* @place_id: A Flickr place id. (only used if bbox argument isn't present) . Experimental. Geo queries require some sort of limiting agent in order t o prevent the database from crying. This is basically like the check agains t "parameterless searches" for queries without a geo component. A tag, fo r instance, is considered a limiting agent as are user defined min_date_tak en and min_date_upload parameters &emdash; If no limiting factor is passed we return only photos added in the last 12 hours (though we may extend the limit in the future) (or NULL)
* *
* Search parameters for &flickcurl_photos_search() * Search parameters for &flickcurl_photos_search()
*/ */
typedef struct { typedef struct {
char* user_id; char* user_id;
char* tags; char* tags;
char* tag_mode; char* tag_mode;
char* text; char* text;
int min_upload_date; int min_upload_date;
int max_upload_date; int max_upload_date;
skipping to change at line 539 skipping to change at line 652
char* bbox; char* bbox;
int accuracy; int accuracy;
int safe_search; int safe_search;
int content_type; int content_type;
char* machine_tags; char* machine_tags;
char* machine_tag_mode; char* machine_tag_mode;
char* group_id; char* group_id;
char* extras; char* extras;
int per_page; int per_page;
int page; int page;
char* place_id;
} flickcurl_search_params; } flickcurl_search_params;
/** /**
* flickcurl_photoset: * flickcurl_photoset:
* @id: photoset ID * @id: photoset ID
* @primary: primary photo ID * @primary: primary photo ID
* @secret: secret * @secret: secret
* @server: server * @server: server
* @farm: farm * @farm: farm
* @photos_count: count of photos in set * @photos_count: count of photos in set
skipping to change at line 711 skipping to change at line 825
const char* flickcurl_get_person_field_label(flickcurl_person_field_type fi eld); const char* flickcurl_get_person_field_label(flickcurl_person_field_type fi eld);
const char* flickcurl_get_field_value_type_label(flickcurl_field_value_type datatype); const char* flickcurl_get_field_value_type_label(flickcurl_field_value_type datatype);
const char* flickcurl_get_context_type_field_label(flickcurl_context_type t ype); const char* flickcurl_get_context_type_field_label(flickcurl_context_type t ype);
/* read a 'INI' style configuration file */ /* read a 'INI' style configuration file */
typedef void (*set_config_var_handler)(void* userdata, const char* key, con st char* value); typedef void (*set_config_var_handler)(void* userdata, const char* key, con st char* value);
int read_ini_config(const char* filename, const char* application, void* us er_data, set_config_var_handler handler); int read_ini_config(const char* filename, const char* application, void* us er_data, set_config_var_handler handler);
/* Flickr API calls */ /* Flickr API calls */
/* flickr.activity */
flickcurl_activity** flickcurl_activity_userComments(flickcurl* fc, int per
_page, int page);
flickcurl_activity** flickcurl_activity_userPhotos(flickcurl* fc, const cha
r* timeframe, int per_page, int page);
void flickcurl_free_activities(flickcurl_activity** activities);
/* flickr.auth */ /* flickr.auth */
char* flickcurl_auth_checkToken(flickcurl* fc, const char* token); char* flickcurl_auth_checkToken(flickcurl* fc, const char* token);
char* flickcurl_auth_getFrob(flickcurl* fc); char* flickcurl_auth_getFrob(flickcurl* fc);
char* flickcurl_auth_getFullToken(flickcurl* fc, const char* frob); char* flickcurl_auth_getFullToken(flickcurl* fc, const char* frob);
char* flickcurl_auth_getToken(flickcurl* fc, const char* frob); char* flickcurl_auth_getToken(flickcurl* fc, const char* frob);
/* flickr.blogs */
flickcurl_blog** flickcurl_blogs_getList(flickcurl* fc);
int flickcurl_blogs_postPhoto(flickcurl* fc, const char* blog_id, const cha
r* photo_id, const char* title, const char* description, const char* blog_p
assword);
void flickcurl_free_blogs(flickcurl_blog **blogs_object);
/* flickr.favorites */
int flickcurl_favorites_add(flickcurl* fc, const char* photo_id);
flickcurl_photo** flickcurl_favorites_getList(flickcurl* fc, const char* us
er_id, const char* extras, int per_page, int page);
flickcurl_photo** flickcurl_favorites_getPublicList(flickcurl* fc, const ch
ar* user_id, const char* extras, int per_page, int page);
int flickcurl_favorites_remove(flickcurl* fc, const char* photo_id);
/* flickr.groups */ /* flickr.groups */
void flickcurl_free_category(flickcurl_category *category); void flickcurl_free_category(flickcurl_category *category);
void flickcurl_free_categories(flickcurl_category **categories_object); void flickcurl_free_categories(flickcurl_category **categories_object);
flickcurl_category* flickcurl_groups_browse(flickcurl* fc, int cat_id); flickcurl_category* flickcurl_groups_browse(flickcurl* fc, int cat_id);
flickcurl_group* flickcurl_groups_getInfo(flickcurl* fc, const char* group_ id, const char* lang); flickcurl_group* flickcurl_groups_getInfo(flickcurl* fc, const char* group_ id, const char* lang);
flickcurl_group** flickcurl_groups_search(flickcurl* fc, const char* text, int per_page, int page); flickcurl_group** flickcurl_groups_search(flickcurl* fc, const char* text, int per_page, int page);
/* flickr.groups.pools */ /* flickr.groups.pools */
int flickcurl_groups_pools_add(flickcurl* fc, const char* photo_id, const c har* group_id); int flickcurl_groups_pools_add(flickcurl* fc, const char* photo_id, const c har* group_id);
flickcurl_context** flickcurl_groups_pools_getContext(flickcurl* fc, const char* photo_id, const char* group_id); flickcurl_context** flickcurl_groups_pools_getContext(flickcurl* fc, const char* photo_id, const char* group_id);
skipping to change at line 776 skipping to change at line 906
flickcurl_photo** flickcurl_photos_recentlyUpdated(flickcurl* fc, int min_d ate, const char* extras, int per_page, int page); flickcurl_photo** flickcurl_photos_recentlyUpdated(flickcurl* fc, int min_d ate, const char* extras, int per_page, int page);
int flickcurl_photos_removeTag(flickcurl* fc, const char* tag_id); int flickcurl_photos_removeTag(flickcurl* fc, const char* tag_id);
flickcurl_photo** flickcurl_photos_search(flickcurl* fc, flickcurl_search_p arams* params); flickcurl_photo** flickcurl_photos_search(flickcurl* fc, flickcurl_search_p arams* params);
int flickcurl_photos_setContentType(flickcurl* fc, const char* photo_id, in t content_type); int flickcurl_photos_setContentType(flickcurl* fc, const char* photo_id, in t content_type);
int flickcurl_photos_setDates(flickcurl* fc, const char* photo_id, int date _posted, int date_taken, int date_taken_granularity); int flickcurl_photos_setDates(flickcurl* fc, const char* photo_id, int date _posted, int date_taken, int date_taken_granularity);
int flickcurl_photos_setMeta(flickcurl* fc, const char* photo_id, const cha r* title, const char* description); int flickcurl_photos_setMeta(flickcurl* fc, const char* photo_id, const cha r* title, const char* description);
int flickcurl_photos_setPerms(flickcurl* fc, const char* photo_id, flickcur l_perms* perms); int flickcurl_photos_setPerms(flickcurl* fc, const char* photo_id, flickcur l_perms* perms);
int flickcurl_photos_setSafetyLevel(flickcurl* fc, const char* photo_id, in t safety_level, int hidden); int flickcurl_photos_setSafetyLevel(flickcurl* fc, const char* photo_id, in t safety_level, int hidden);
int flickcurl_photos_setTags(flickcurl* fc, const char* photo_id, const cha r* tags); int flickcurl_photos_setTags(flickcurl* fc, const char* photo_id, const cha r* tags);
/* flickr.places */
flickcurl_place* flickcurl_places_resolvePlaceId(flickcurl* fc, const char*
place_id);
flickcurl_place* flickcurl_places_resolvePlaceURL(flickcurl* fc, const char
* url);
const char* flickcurl_get_place_type_label(flickcurl_place_type place_type)
;
void flickcurl_free_place(flickcurl_place* place);
/* flickr.contacts */ /* flickr.contacts */
void flickcurl_free_contact(flickcurl_contact *contact_object); void flickcurl_free_contact(flickcurl_contact *contact_object);
void flickcurl_free_contacts(flickcurl_contact **contacts_object); void flickcurl_free_contacts(flickcurl_contact **contacts_object);
flickcurl_contact** flickcurl_contacts_getList(flickcurl* fc, const char* f ilter, int page, int per_page); flickcurl_contact** flickcurl_contacts_getList(flickcurl* fc, const char* f ilter, int page, int per_page);
flickcurl_contact** flickcurl_contacts_getPublicList(flickcurl* fc, const c har* user_id, int page, int per_page); flickcurl_contact** flickcurl_contacts_getPublicList(flickcurl* fc, const c har* user_id, int page, int per_page);
/* flickr.photos.comments */ /* flickr.photos.comments */
void flickcurl_free_comment(flickcurl_comment *comment_object); void flickcurl_free_comment(flickcurl_comment *comment_object);
void flickcurl_free_comments(flickcurl_comment **comments_object); void flickcurl_free_comments(flickcurl_comment **comments_object);
char* flickcurl_photos_comments_addComment(flickcurl* fc, const char* photo _id, const char* comment_text); char* flickcurl_photos_comments_addComment(flickcurl* fc, const char* photo _id, const char* comment_text);
skipping to change at line 848 skipping to change at line 984
/* flickr.tag */ /* flickr.tag */
flickcurl_tag** flickcurl_tags_getHotList(flickcurl* fc, const char* period , int tag_count); flickcurl_tag** flickcurl_tags_getHotList(flickcurl* fc, const char* period , int tag_count);
flickcurl_tag** flickcurl_tags_getListPhoto(flickcurl* fc, const char* phot o_id); flickcurl_tag** flickcurl_tags_getListPhoto(flickcurl* fc, const char* phot o_id);
flickcurl_tag** flickcurl_tags_getListUser(flickcurl* fc, const char* user_ id); flickcurl_tag** flickcurl_tags_getListUser(flickcurl* fc, const char* user_ id);
flickcurl_tag** flickcurl_tags_getListUserPopular(flickcurl* fc, const char * user_id, int pop_count); flickcurl_tag** flickcurl_tags_getListUserPopular(flickcurl* fc, const char * user_id, int pop_count);
flickcurl_tag** flickcurl_tags_getListUserRaw(flickcurl* fc, const char* ta g); flickcurl_tag** flickcurl_tags_getListUserRaw(flickcurl* fc, const char* ta g);
flickcurl_tag** flickcurl_tags_getRelated(flickcurl* fc, const char* tag); flickcurl_tag** flickcurl_tags_getRelated(flickcurl* fc, const char* tag);
/* flickr.test */ /* flickr.test */
int flickcurl_test_echo(flickcurl* fc, const char* key, const char* value); int flickcurl_test_echo(flickcurl* fc, const char* key, const char* value);
char* flickcurl_test_login(flickcurl* fc);
int flickcurl_test_null(flickcurl* fc);
/* flickr.urls */ /* flickr.urls */
char* flickcurl_urls_getGroup(flickcurl* fc, const char* group_id); char* flickcurl_urls_getGroup(flickcurl* fc, const char* group_id);
char* flickcurl_urls_getUserPhotos(flickcurl* fc, const char* user_id); char* flickcurl_urls_getUserPhotos(flickcurl* fc, const char* user_id);
char* flickcurl_urls_getUserProfile(flickcurl* fc, const char* user_id); char* flickcurl_urls_getUserProfile(flickcurl* fc, const char* user_id);
char* flickcurl_urls_lookupGroup(flickcurl* fc, const char* url); char* flickcurl_urls_lookupGroup(flickcurl* fc, const char* url);
char* flickcurl_urls_lookupUser(flickcurl* fc, const char* url); char* flickcurl_urls_lookupUser(flickcurl* fc, const char* url);
/* Upload API */ /* Upload API */
FLICKCURL_DEPRECATED flickcurl_upload_status* flickcurl_photos_upload(flick curl* fc, const char* photo_file, const char *title, const char *descriptio n, const char *tags, int is_public, int is_friend, int is_family); FLICKCURL_DEPRECATED flickcurl_upload_status* flickcurl_photos_upload(flick curl* fc, const char* photo_file, const char *title, const char *descriptio n, const char *tags, int is_public, int is_friend, int is_family);
 End of changes. 19 change blocks. 
3 lines changed or deleted 151 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/