From: Greg Kroah-Hartman Date: Tue, 5 May 2009 06:03:32 +0000 (-0700) Subject: Merge branch 'master' of git://github.com/amir/bti X-Git-Url: https://git.toastfreeware.priv.at/gregoa/bti.git/commitdiff_plain/f3d7e24bd5c7f494515f7a726f852572d2edb400?hp=414a993634c754a426c6f9da05d8f65e694a88a0 Merge branch 'master' of git://github.com/amir/bti --- diff --git a/bti.c b/bti.c index 4cdce35..69efeb3 100644 --- a/bti.c +++ b/bti.c @@ -52,16 +52,17 @@ static int debug; enum host { - HOST_TWITTER = 0, + HOST_TWITTER = 0, HOST_IDENTICA = 1, + HOST_CUSTOM = 2 }; enum action { - ACTION_UPDATE = 0, + ACTION_UPDATE = 0, ACTION_FRIENDS = 1, - ACTION_USER = 2, + ACTION_USER = 2, ACTION_REPLIES = 4, - ACTION_PUBLIC = 8, + ACTION_PUBLIC = 8, ACTION_UNKNOWN = 16 }; @@ -74,6 +75,7 @@ struct session { char *homedir; char *logfile; char *user; + char *hosturl; int bash; int shrink_urls; int dry_run; @@ -139,6 +141,7 @@ static void session_free(struct session *session) free(session->time); free(session->homedir); free(session->user); + free(session->hosturl); free(session); } @@ -170,17 +173,14 @@ static void bti_curl_buffer_free(struct bti_curl_buffer *buffer) free(buffer); } -static const char *twitter_user_url = "http://twitter.com/statuses/user_timeline/"; -static const char *twitter_update_url = "https://twitter.com/statuses/update.xml"; -static const char *twitter_public_url = "http://twitter.com/statuses/public_timeline.xml"; -static const char *twitter_friends_url = "https://twitter.com/statuses/friends_timeline.xml"; -static const char *twitter_replies_url = "http://twitter.com/statuses/replies.xml"; +static const char *twitter_host = "http://twitter.com/statuses"; +static const char *identica_host = "https://identi.ca/api/statuses"; -static const char *identica_user_url = "https://identi.ca/api/statuses/user_timeline/"; -static const char *identica_update_url = "https://identi.ca/api/statuses/update.xml"; -static const char *identica_public_url = "https://identi.ca/api/statuses/public_timeline.xml"; -static const char *identica_friends_url = "https://identi.ca/api/statuses/friends_timeline.xml"; -static const char *identica_replies_url = "https://identi.ca/api/statuses/replies.xml"; +static const char *user_uri = "/user_timeline/"; +static const char *update_uri = "/update.xml"; +static const char *public_uri = "/public_timeline.xml"; +static const char *friends_uri = "/friends_timeline.xml"; +static const char *replies_uri = "/replies.xml"; static CURL *curl_init(void) { @@ -304,10 +304,9 @@ static size_t curl_callback(void *buffer, size_t size, size_t nmemb, static int send_request(struct session *session) { + char endpoint[100]; char user_password[500]; char data[500]; - /* is there usernames longer than 22 chars? */ - char user_url[70]; struct bti_curl_buffer *curl_buf; CURL *curl = NULL; CURLcode res; @@ -344,75 +343,38 @@ static int send_request(struct session *session) curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost); slist = curl_slist_append(slist, "Expect:"); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, slist); - switch (session->host) { - case HOST_TWITTER: - curl_easy_setopt(curl, CURLOPT_URL, - twitter_update_url); - break; - case HOST_IDENTICA: - curl_easy_setopt(curl, CURLOPT_URL, - identica_update_url); - break; - } + + sprintf(endpoint, "%s%s", session->hosturl, update_uri); + curl_easy_setopt(curl, CURLOPT_URL, endpoint); curl_easy_setopt(curl, CURLOPT_USERPWD, user_password); break; case ACTION_FRIENDS: snprintf(user_password, sizeof(user_password), "%s:%s", session->account, session->password); - switch (session->host) { - case HOST_TWITTER: - sprintf(user_url, "%s?page=%d", twitter_friends_url, session->page); - curl_easy_setopt(curl, CURLOPT_URL, user_url); - break; - case HOST_IDENTICA: - sprintf(user_url, "%s?page=%d", identica_friends_url, session->page); - curl_easy_setopt(curl, CURLOPT_URL, user_url); - break; - } + sprintf(endpoint, "%s%s?page=%d", session->hosturl, + friends_uri, session->page); + curl_easy_setopt(curl, CURLOPT_URL, endpoint); curl_easy_setopt(curl, CURLOPT_USERPWD, user_password); break; case ACTION_USER: - switch (session->host) { - case HOST_TWITTER: - sprintf(user_url, "%s%s.xml?page=%d", twitter_user_url, session->user, session->page); - curl_easy_setopt(curl, CURLOPT_URL, user_url); - break; - case HOST_IDENTICA: - sprintf(user_url, "%s%s.xml?page=%d", identica_user_url, session->user, session->page); - curl_easy_setopt(curl, CURLOPT_URL, user_url); - break; - } + sprintf(endpoint, "%s%s%s.xml?page=%d", session->hosturl, user_uri, + session->user, session->page); + curl_easy_setopt(curl, CURLOPT_URL, endpoint); break; case ACTION_REPLIES: snprintf(user_password, sizeof(user_password), "%s:%s", session->account, session->password); - switch (session->host) { - case HOST_TWITTER: - sprintf(user_url, "%s?page=%d", twitter_replies_url, session->page); - curl_easy_setopt(curl, CURLOPT_URL, user_url); - break; - case HOST_IDENTICA: - sprintf(user_url, "%s?page=%d", identica_replies_url, session->page); - curl_easy_setopt(curl, CURLOPT_URL, user_url); - break; - } + sprintf(endpoint, "%s%s?page=%d", session->hosturl, replies_uri, session->page); + curl_easy_setopt(curl, CURLOPT_URL, endpoint); curl_easy_setopt(curl, CURLOPT_USERPWD, user_password); break; case ACTION_PUBLIC: - switch (session->host) { - case HOST_TWITTER: - sprintf(user_url, "%s?page=%d", twitter_public_url, session->page); - curl_easy_setopt(curl, CURLOPT_URL, user_url); - break; - case HOST_IDENTICA: - sprintf(user_url, "%s?page=%d", identica_public_url, session->page); - curl_easy_setopt(curl, CURLOPT_URL, user_url); - break; - } + sprintf(endpoint, "%s%s?page=%d", session->hosturl, public_uri, session->page); + curl_easy_setopt(curl, CURLOPT_URL, endpoint); break; default: @@ -540,10 +502,16 @@ static void parse_configfile(struct session *session) if (account) session->account = account; if (host) { - if (strcasecmp(host, "twitter") == 0) + if (strcasecmp(host, "twitter") == 0) { session->host = HOST_TWITTER; - if (strcasecmp(host, "identica") == 0) + session->hosturl = strdup(twitter_host); + } else if (strcasecmp(host, "identica") == 0) { session->host = HOST_IDENTICA; + session->hosturl = strdup(identica_host); + } else { + session->host = HOST_CUSTOM; + session->hosturl = strdup(host); + } free(host); } if (proxy) { @@ -603,7 +571,7 @@ static void log_session(struct session *session, int retval) host = "identi.ca"; break; default: - host = "unknown"; + host = session->hosturl; break; } @@ -1038,10 +1006,18 @@ int main(int argc, char *argv[], char *envp[]) session->shrink_urls = 1; break; case 'H': - if (strcasecmp(optarg, "twitter") == 0) + if (session->hosturl) + free(session->hosturl); + if (strcasecmp(optarg, "twitter") == 0) { session->host = HOST_TWITTER; - if (strcasecmp(optarg, "identica") == 0) + session->hosturl = strdup(twitter_host); + } else if (strcasecmp(optarg, "identica") == 0) { session->host = HOST_IDENTICA; + session->hosturl = strdup(identica_host); + } else { + session->host = HOST_CUSTOM; + session->hosturl = strdup(optarg); + } dbg("host = %d\n", session->host); break; case 'b': diff --git a/bti.example b/bti.example index dd4f764..e6ad489 100644 --- a/bti.example +++ b/bti.example @@ -6,6 +6,8 @@ account=twitmaster password=icanhascheezburger host=identica +# Example of a custom laconica installation +#host=http://army.twit.tv/api/statuses logfile=.bti.log #action=update #user=gregkh