« ソーシャルブックマーク管理ツール bookey 0.40版 ― FC2BOOKMARK と Buzzurl 関連の修正を実施 | トップページ | インフォシークのラッキーサーチ »
2007.08.24
任意のWebページにはてなスターの ☆ をつけるプログラム
「ついすた」機能を chirrup に取り込むための前段階として、「任意のWebページにはてなスターの ☆ をつける」コードを C で書いてみました。「ついすた」というのは、Twitter の任意の「発言」に☆をつける機能のことです。Twitter と「はてなスター」のコラボレーションですね。
chirrup や bookey で使っているライブラリ(xmlRPC.dll)を使うことを前提にしたコードになってますが、このライブラリがどういうものかは知らなくても、何をやってるかは、以下のソースコードを見ていただければわかると思います。「はてなスター」であれこれしたい人の参考になればいいんですが。
ということで、以下、ソースコードです。
#include "xmlRpc.h"
#include <time.h>
char *getTitle( const char * url ); // Webページの title を取得
char *any2utf( const char *p ); // 任意の charSet から UTF-8 に変換
// はてなスターにログインする
BOOL
loginHatenaStar(
const char *username, // (I) はてなID
const char *password, // (I) パスワード
char *cookie ) // (O) クッキー
{
int ret = FALSE;
char *request;
char *response;
char url[MAX_URLLENGTH];
size_t sz = MAX_CONTENT_SIZE * 2;
if ( !cookie || !username || !password )
return ( ret );
request = (char *)malloc( MAX_CONTENT_SIZE );
if ( !request )
return ( ret );
response = (char *)malloc( sz );
if ( !response ) {
free( request );
return ( ret );
}
memset( request, 0x00, MAX_CONTENT_SIZE );
strcpy( url,
"https://www.hatena.ne.jp/login?"
"location=http%3A%2F%2Fs.hatena.ne.jp%2F" );
setUpReceiveBuffer( response, sz );
http_getEx( url, response, cookie );
strcpy( url, "https://www.hatena.ne.jp/login" );
setTargetURL( url );
sprintf( request,
"name=%s&"
"password=%s&"
"persistent=1&"
"location=http://s.hatena.ne.jp/",
username, password );
setUpReceiveBuffer( response, sz );
http_postEx( url, "application/x-www-form-urlencoded",
request, response, cookie );
if ( *response ) {
if ( strstr( response, sjis2utf("ログイン中です") ) != NULL ) {
setUpReceiveBuffer( response, sz );
http_getEx( "http://s.hatena.ne.jp/", response, cookie );
if ( *response ) {
if ( strstr( response, sjis2utf(">ログアウト</a>") ) != NULL )
ret = TRUE; /* ログイン成功 */
}
}
}
free( response );
free( request );
return ( ret );
}
// targetURL で指定したWebページに ☆ をつける
BOOL
setHatenaStar( const char *targetURL, // (I) ☆をつけたいWebページURL
const char *username, // (I) はてなID
const char *password ) // (I) パスワード
{
size_t sz = MAX_CONTENT_SIZE;
char *request;
char *response;
char *url;
char cookie[MAX_COOKIE_LEN];
BOOL r;
BOOL ret = FALSE;
memset( cookie, 0x00, MAX_COOKIE_LEN );
request = (char *)malloc( sz );
if ( !request )
return ( ret );
response = (char *)malloc( sz );
if ( !response ) {
free( request );
return ( ret );
}
url = (char *)malloc( strlen( targetURL ) + MAX_CONTENT_SIZE );
if ( !url ) {
free( response );
free( request );
return ( ret );
}
// はてなスターにログイン
r = loginHatenaStar( username, password, cookie );
if ( r ) {
time_t t = time( NULL );
struct tm *tm = localtime( &t );
char timeStr[BUFSIZ];
strftime( timeStr, BUFSIZ - 1,
"%a %b %d %H:%M:%S UTC+0900 %Y", tm );
// rks を取得
setUpReceiveBuffer( response, sz );
sprintf( url,
"http://s.hatena.ne.jp/entries.json?"
"uri=%s&"
"callback=Ten.JSONP.callback&",
encodeURL( targetURL ) );
sprintf( url + strlen(url),
"%s",
encodeURL( timeStr ) );
http_getEx( url, response, cookie );
if ( *response ) {
char rks[BUFSIZ];
char title[BUFSIZ];
const char *p, *q;
p = strstr( response, "\"rks\":\"" );
if ( p ) {
p += 7;
q = strchr( p, '"' );
if ( q ) {
strncpy( rks, p, q - p );
rks[q - p] = NUL;
}
// ☆をつける
t = time( NULL );
tm = localtime( &t );
strftime( timeStr, BUFSIZ - 1,
"%a %b %d %H:%M:%S UTC+0900 %Y", tm );
strcpy( title, getTitle( targetURL ) );
setUpReceiveBuffer( response, sz );
sprintf( url,
"http://s.hatena.ne.jp/star.add.json?uri=%s&",
encodeURL( targetURL ) );
sprintf( url + strlen(url),
"title=%s&"
"rks=%s&"
"callback=Ten.JSONP.callback&",
encodeURL( any2utf(title)), rks );
sprintf( url + strlen(url),
"%s",
encodeURL( timeStr ) );
http_getEx( url, response, cookie );
if ( *response ) {
if ( strstr( response, username ) ||
strstr( response, "\"name\":\"" ) )
ret = TRUE;
}
}
}
}
free( url );
free( response );
free( request );
return ( ret );
}
投稿者: tsupo 2007.08.24 午後 08:29
| 固定リンク
|
|
| ![]()
|
|
アマゾンわくわく探検隊
トラックバック
この記事のトラックバックURL:
この記事へのトラックバック一覧です: 任意のWebページにはてなスターの ☆ をつけるプログラム:
» Twitter クライアント chirrup 1.51版 ― Twitterと「はてなスター」のコラボレーション「ついすた」に対応しました from 観測気球
bookey に先立って「ついすた」機能を実装してみていた chirrup ですが、だいたい安定してきましたので、この辺で最新版を公開することにします。 続きを読む
» ソーシャルブックマーク管理ツール bookey 0.42版 ― 「はてなスター」に対応しました from 観測気球
今回の目玉は「はてなスター」対応。「はてなスター」未設置のサイトにも ☆ をつけることができます。ただし、☆ のつけすぎに注意(結構、習慣性があるようです)。 続きを読む



