| 2 |
* |
* |
| 3 |
* $Revision$ |
* $Revision$ |
| 4 |
* $Log$ |
* $Log$ |
| 5 |
|
* Revision 1.58 2005/02/08 06:40:51 youi |
| 6 |
|
* pubmedComplete:ジャーナルの完全なタイトルを取得してpubmed_tにセット. |
| 7 |
|
* |
| 8 |
* Revision 1.57 2005/02/03 12:04:58 youi |
* Revision 1.57 2005/02/03 12:04:58 youi |
| 9 |
* getOwnPublicItemIDを定義. |
* getOwnPublicItemIDを定義. |
| 10 |
* binder_item_linkのテーブル名を修正. |
* binder_item_linkのテーブル名を修正. |
| 288 |
static SQLHANDLE hdbc = NULL; |
static SQLHANDLE hdbc = NULL; |
| 289 |
static SQLHANDLE hstmt = NULL; |
static SQLHANDLE hstmt = NULL; |
| 290 |
|
|
| 291 |
|
static bool processEsummary(xmlTextReaderPtr reader, pubmed_t* p); |
| 292 |
|
static bool processEsearch(xmlTextReaderPtr reader, pubmed_t* p, int* DocID ); |
| 293 |
static void processEfetch(xmlTextReaderPtr reader, pubmed_t* p); |
static void processEfetch(xmlTextReaderPtr reader, pubmed_t* p); |
| 294 |
static int streamPubmedFile(const char *filename, pubmed_t* p); |
static int streamPubmedFile(const char *filename, pubmed_t* p); |
| 295 |
static result_t insertIndexInternal( sessionid_t sid, index_t *index, indexid_t *xid ); |
static result_t insertIndexInternal( sessionid_t sid, index_t *index, indexid_t *xid ); |
| 6045 |
|
|
| 6046 |
static int streamPubmedFile(const char *filename, pubmed_t* p) |
static int streamPubmedFile(const char *filename, pubmed_t* p) |
| 6047 |
{ |
{ |
| 6048 |
xmlTextReaderPtr reader; |
xmlTextReaderPtr reader = 0; |
| 6049 |
int ret = 0; |
int ret = 0; |
| 6050 |
|
int DocID = 0; |
| 6051 |
|
|
| 6052 |
reader = xmlNewTextReaderFilename(filename); |
reader = xmlNewTextReaderFilename(filename); |
| 6053 |
if( reader != NULL ){ |
if( reader != NULL ){ |
| 6057 |
ret = xmlTextReaderRead(reader); |
ret = xmlTextReaderRead(reader); |
| 6058 |
} |
} |
| 6059 |
xmlFreeTextReader(reader); |
xmlFreeTextReader(reader); |
|
if( ret != 0 ){ |
|
|
//printf("%s : failed to parse\n", filename); |
|
|
} |
|
|
}else{ |
|
|
//printf("Unable to open %s\n", filename); |
|
| 6060 |
} |
} |
| 6061 |
xmlErrorPtr err = xmlGetLastError(); |
xmlErrorPtr err = xmlGetLastError(); |
| 6062 |
if( err != NULL ){ |
if( err != NULL ){ |
| 6063 |
setLastErrorString( err -> message ); |
setLastErrorString( err -> message ); |
| 6064 |
|
return ret; |
| 6065 |
|
} |
| 6066 |
|
|
| 6067 |
|
string url = PUBMED_ESEARCH_URL_BASE; |
| 6068 |
|
const char* ptr = p -> getJournal( ); |
| 6069 |
|
while( *ptr != '\0' ){ |
| 6070 |
|
char buf[ 4 ]; |
| 6071 |
|
sprintf( buf, "%%%02X", ( unsigned char )*( ptr++ ) ); |
| 6072 |
|
url += buf; |
| 6073 |
|
} |
| 6074 |
|
|
| 6075 |
|
reader = xmlNewTextReaderFilename(url.c_str()); |
| 6076 |
|
if( reader != NULL ){ |
| 6077 |
|
ret = xmlTextReaderRead(reader); |
| 6078 |
|
while( ret == 1 ){ |
| 6079 |
|
if( processEsearch(reader, p, &DocID ) ) break; |
| 6080 |
|
ret = xmlTextReaderRead(reader); |
| 6081 |
|
} |
| 6082 |
|
xmlFreeTextReader(reader); |
| 6083 |
|
} |
| 6084 |
|
err = xmlGetLastError(); |
| 6085 |
|
if( err != NULL ){ |
| 6086 |
|
setLastErrorString( err -> message ); |
| 6087 |
|
return ret; |
| 6088 |
|
} |
| 6089 |
|
fprintf( stderr, "\nDocID=%d", DocID ); |
| 6090 |
|
|
| 6091 |
|
url = PUBMED_ESUMMARY_URL_BASE; |
| 6092 |
|
url += intToString( DocID ); |
| 6093 |
|
fprintf( stderr, "\n%s", url.c_str() ); |
| 6094 |
|
reader = xmlNewTextReaderFilename(url.c_str()); |
| 6095 |
|
if( reader != NULL ){ |
| 6096 |
|
ret = xmlTextReaderRead(reader); |
| 6097 |
|
while( ret == 1 ){ |
| 6098 |
|
if( processEsummary( reader, p ) ) break; |
| 6099 |
|
ret = xmlTextReaderRead( reader ); |
| 6100 |
|
} |
| 6101 |
|
xmlFreeTextReader(reader); |
| 6102 |
|
} |
| 6103 |
|
err = xmlGetLastError(); |
| 6104 |
|
if( err != NULL ){ |
| 6105 |
|
setLastErrorString( err -> message ); |
| 6106 |
|
return ret; |
| 6107 |
} |
} |
| 6108 |
|
|
| 6109 |
return ret; |
return ret; |
| 6110 |
} |
} |
| 6111 |
|
|
| 6127 |
//printf( "PMID=%s\n", value ); |
//printf( "PMID=%s\n", value ); |
| 6128 |
p -> setID( atoi( ( char* )value ) ); |
p -> setID( atoi( ( char* )value ) ); |
| 6129 |
xmlFree( value ); |
xmlFree( value ); |
| 6130 |
|
value = NULL; |
| 6131 |
} |
} |
| 6132 |
} |
} |
| 6133 |
}else if( strcmp( "ArticleTitle", ( char* )name ) == 0 ){ |
}else if( strcmp( "ArticleTitle", ( char* )name ) == 0 ){ |
| 6187 |
if( value != NULL) xmlFree(value); |
if( value != NULL) xmlFree(value); |
| 6188 |
} |
} |
| 6189 |
|
|
| 6190 |
/* |
/** |
| 6191 |
void main( int argc, char* argv[] ) |
* |
| 6192 |
|
* @return true DocIDを取得した. |
| 6193 |
|
* @return false DocIDを取得出来なかった.パースの継続を請う. |
| 6194 |
|
*/ |
| 6195 |
|
static bool processEsearch(xmlTextReaderPtr reader, pubmed_t* p, int* DocID ) |
| 6196 |
|
{ |
| 6197 |
|
xmlChar* name = NULL; |
| 6198 |
|
xmlChar* value = NULL; |
| 6199 |
|
|
| 6200 |
|
name = xmlTextReaderName(reader); |
| 6201 |
|
if( name == NULL) |
| 6202 |
|
name = xmlStrdup(BAD_CAST "--"); |
| 6203 |
|
value = xmlTextReaderValue(reader); |
| 6204 |
|
|
| 6205 |
|
if( xmlTextReaderNodeType(reader) == XML_READER_TYPE_ELEMENT ){ |
| 6206 |
|
if( strcmp( "Id", ( char* )name ) == 0 ){ |
| 6207 |
|
if( xmlTextReaderRead(reader) == 1 ){ |
| 6208 |
|
if( xmlTextReaderNodeType( reader ) == XML_READER_TYPE_TEXT ){ |
| 6209 |
|
xmlChar* value = xmlTextReaderValue( reader ); |
| 6210 |
|
*DocID = atoi( ( char* )value ); |
| 6211 |
|
xmlFree( value ); |
| 6212 |
|
value = NULL; |
| 6213 |
|
return true; |
| 6214 |
|
} |
| 6215 |
|
} |
| 6216 |
|
} |
| 6217 |
|
} |
| 6218 |
|
xmlFree(name); |
| 6219 |
|
|
| 6220 |
|
if( value != NULL) xmlFree(value); |
| 6221 |
|
return false; |
| 6222 |
|
} |
| 6223 |
|
|
| 6224 |
|
/** |
| 6225 |
|
* |
| 6226 |
|
* @return true Journal Titleを取得した. |
| 6227 |
|
* @return false Journal Titleを取得出来なかった.パースの継続を請う. |
| 6228 |
|
*/ |
| 6229 |
|
static bool processEsummary(xmlTextReaderPtr reader, pubmed_t* p) |
| 6230 |
{ |
{ |
| 6231 |
pubmed_t p; |
xmlChar* name = NULL; |
| 6232 |
|
xmlChar* value = NULL; |
| 6233 |
|
bool ret = false; |
| 6234 |
|
|
| 6235 |
|
name = xmlTextReaderName(reader); |
| 6236 |
|
if( name == NULL) |
| 6237 |
|
name = xmlStrdup(BAD_CAST "--"); |
| 6238 |
|
value = xmlTextReaderValue(reader); |
| 6239 |
|
|
| 6240 |
|
if( xmlTextReaderNodeType(reader) == XML_READER_TYPE_ELEMENT ){ |
| 6241 |
|
if( strcmp( "Item", ( char* )name ) == 0 ){ |
| 6242 |
|
xmlChar* attr_val = xmlTextReaderGetAttribute( reader, ( xmlChar* )"Name" ); |
| 6243 |
|
if( attr_val != NULL ){ |
| 6244 |
|
if( strcmp( "Title", ( char* )attr_val ) == 0 ){ |
| 6245 |
|
if( xmlTextReaderRead(reader) == 1 ){ |
| 6246 |
|
if( xmlTextReaderNodeType( reader ) == XML_READER_TYPE_TEXT ){ |
| 6247 |
|
xmlChar* value = xmlTextReaderValue( reader ); |
| 6248 |
|
p -> setJournal( ( char* )value ); |
| 6249 |
|
xmlFree( value ); |
| 6250 |
|
value = NULL; |
| 6251 |
|
ret = true; |
| 6252 |
|
} |
| 6253 |
|
} |
| 6254 |
|
} |
| 6255 |
|
xmlFree( attr_val ); |
| 6256 |
|
} |
| 6257 |
|
} |
| 6258 |
|
} |
| 6259 |
|
xmlFree(name); |
| 6260 |
|
|
| 6261 |
printf( "result in %d\n", streamFile( argv[1], &p ) ); |
if( value != NULL) xmlFree(value); |
| 6262 |
printf( "'%d'\n" |
return ret; |
|
"'%s'\n" |
|
|
"'%s'\n" |
|
|
"'%s'\n" |
|
|
"'%d'\n" |
|
|
"'%d'\n" |
|
|
"'%d'\n" |
|
|
"'%s'\n" |
|
|
"'%s'\n", |
|
|
p.getID( ), |
|
|
p.getTitle( ), |
|
|
p.getAuthor( ), |
|
|
p.getJournal( ), |
|
|
p.getYearOfPublication( ), |
|
|
p.getVolume( ), |
|
|
p.getNumber( ), |
|
|
p.getPage( ), |
|
|
p.getAbstract( ) ); |
|
| 6263 |
} |
} |
|
*/ |
|
| 6264 |
|
|
| 6265 |
static void processAsinSearch(xmlTextReaderPtr reader, amazonbook_t* p ) |
static void processAsinSearch(xmlTextReaderPtr reader, amazonbook_t* p ) |
| 6266 |
{ |
{ |
| 6648 |
* |
* |
| 6649 |
* |
* |
| 6650 |
*/ |
*/ |
| 6651 |
/* |
extern "C" {int zip_main(int, char**);} |
| 6652 |
result_t zipCreate( char* zippath, char** files, int filesLen ) |
result_t zipCreate( char* zippath, char** files, int filesLen ) |
| 6653 |
{ |
{ |
| 6654 |
char** argv = new char*[filesLen+1]; |
char** argv = new char*[filesLen+3]; |
| 6655 |
argv[ 0 ] = zippath; |
argv[ 0 ] = NULL; |
| 6656 |
|
argv[ 1 ] = "-o"; |
| 6657 |
|
argv[ 2 ] = zippath; |
| 6658 |
for( int i = 0; i < filesLen; i++ ){ |
for( int i = 0; i < filesLen; i++ ){ |
| 6659 |
argv[ i + 1 ] = files[ i ]; |
argv[ i + 3 ] = files[ i ]; |
| 6660 |
} |
} |
| 6661 |
if( !zip_main( argc, argv ) ){ |
if( !zip_main( filesLen + 3, argv ) ){ |
| 6662 |
|
delete[] argv; |
| 6663 |
return RES_OK; |
return RES_OK; |
| 6664 |
} |
} |
| 6665 |
|
delete[] argv; |
| 6666 |
return RES_ERROR; |
return RES_ERROR; |
| 6667 |
} |
} |
|
*/ |
|