Develop and Download Open Source Software

Browse CVS Repository

Diff of /xoonips/AL/commonal.cc

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.46 by youi, Fri Jan 21 01:36:11 2005 UTC revision 1.47 by aga, Sat Jan 22 02:41:14 2005 UTC
# Line 2  Line 2 
2   *   *
3   * $Revision$   * $Revision$
4   * $Log$   * $Log$
5     * Revision 1.47  2005/01/22 02:41:14  aga
6     * ・amazon補完を作成.
7     *
8   * Revision 1.46  2005/01/21 01:36:11  youi   * Revision 1.46  2005/01/21 01:36:11  youi
9   * pubmed補完機能を追加した.   * pubmed補完機能を追加した.
10   *   *
# Line 235  using namespace std; Line 238  using namespace std;
238  #include "index.h"  #include "index.h"
239  #include "changelog.h"  #include "changelog.h"
240  #include "pubmed.h"  #include "pubmed.h"
241    #include "amazonbook.h"
242    
243  static string dbprefix; //!< XOOPSデータベーステーブルのPREFIX  static string dbprefix; //!< XOOPSデータベーステーブルのPREFIX
244    
# Line 5874  void main( int argc, char* argv[] ) Line 5878  void main( int argc, char* argv[] )
5878              p.getAbstract( ) );              p.getAbstract( ) );
5879  }  }
5880  */  */
5881    
5882    static void processAsinSearch(xmlTextReaderPtr reader, amazonbook_t* p )
5883    {
5884        xmlChar* name = NULL;
5885        xmlChar* value = NULL;
5886        
5887        name = xmlTextReaderName(reader);
5888        if( name == NULL)
5889            name = xmlStrdup(BAD_CAST "--");
5890        value = xmlTextReaderValue(reader);
5891        
5892        if( xmlTextReaderNodeType(reader) == XML_READER_TYPE_ELEMENT ){
5893            if( strcmp( "Details", (char*)name ) == 0 ){
5894                // <Details url="...">
5895                xmlChar* val = xmlTextReaderGetAttribute(reader,(xmlChar*)"url");
5896                if( val != NULL ){
5897                    p -> setURL( ( char* )val );
5898                    xmlFree( val );
5899                }
5900            }else if( strcmp( "ReleaseDate", (char*)name ) == 0 ){
5901                // <ReleaseDate>21 June, 2003</ReleaseDate>
5902                // コンマで区切り、2個目をsscanf(%d)する。
5903                xmlChar* val = getChildText( reader );
5904                if ( val != NULL ){
5905                    char *q = strchr( (char *)val, ',' );
5906                    if ( q != NULL ){
5907                        int year;
5908                        if ( sscanf( q+1, "%d", &year ) == 1 )
5909                            p -> setYearOfPublication( year );
5910                    }
5911                    xmlFree( val );
5912                }
5913            }else if( strcmp( "Author", (char*)name ) == 0 ){
5914                xmlChar* val = getChildText( reader );
5915                if ( val != NULL ){
5916                    // Authorを\n区切りで追加する。
5917                    string s( p -> getAuthor() );
5918                    if ( s.length() == 0 ){
5919                        p -> setAuthor( (char*)val );
5920                    }
5921                    else {
5922                       s = s + "\n" + (char *)val;
5923                       p -> setAuthor( s.c_str() );
5924                    }
5925                    xmlFree( val );
5926                }
5927            }else if( strcmp( "Asin", (char*)name ) == 0 ){
5928                xmlChar* val = getChildText( reader );
5929                p -> setISBN( ( char* )val );
5930                if( val != NULL ) xmlFree( val );
5931            }else if( strcmp( "ProductName", (char*)name ) == 0 ){
5932                xmlChar* val = getChildText( reader );
5933                p -> setTitle( ( char* )val );
5934                if( val != NULL ) xmlFree( val );
5935            }else if( strcmp( "Manufacturer", (char*)name ) == 0 ){
5936                xmlChar* val = getChildText( reader );
5937                p -> setPublisher( ( char* )val );
5938                if( val != NULL ) xmlFree( val );
5939            }
5940        }
5941        xmlFree(name);
5942        
5943        if( value != NULL) xmlFree(value);
5944    }
5945    
5946    static int streamAmazonBookFile(const char *filename, amazonbook_t* p)
5947    {
5948        xmlTextReaderPtr reader;
5949        int ret;
5950        
5951        reader = xmlNewTextReaderFilename(filename);
5952        if( reader != NULL ){
5953            ret = xmlTextReaderRead(reader);
5954            while( ret == 1 ){
5955                processAsinSearch(reader, p);
5956                ret = xmlTextReaderRead(reader);
5957            }
5958            xmlFreeTextReader(reader);
5959            if( ret != 0 ){
5960                //printf("%s : failed to parse\n", filename);
5961            }
5962        }else{
5963            ret = -1;
5964            //printf("Unable to open %s\n", filename);
5965        }
5966        xmlErrorPtr err = xmlGetLastError();
5967        if( err != NULL ){
5968            setLastErrorString( err -> message );
5969        }
5970        return ret;
5971    }
5972    
5973    /**
5974     * @param url amazonのASIN Searchの結果のURL.
5975     *            ex.:http://xml.amazon.com/onca/xml3?t=chararina-22&dev-t=0H8BRF5MB0Z590ZPWA82&type=lite&f=xml&AsinSearch=081297106X
5976     * @param amazonbook 結果を書き込むamazonbook_tのポインタ引数
5977     */
5978    result_t amazonComplete( const char *url, const amazonbook_t** amazonbook )
5979    {
5980        result_t ret = RES_ERROR;
5981        *amazonbook = new amazonbook_t[1];
5982        if( streamAmazonBookFile( url, (amazonbook_t *)*amazonbook ) == 0 ) ret = RES_OK;
5983        return ret;
5984    }
5985    

Legend:
Removed from v.1.46  
changed lines
  Added in v.1.47

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26