⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 apitest.c

📁 harvest是一个下载html网页得机器人
💻 C
字号:
/* $Id: apitest.c,v 1.14 2003/06/18 11:46:33 adam Exp $   Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002   Index Data ApsThis file is part of the Zebra server.Zebra is free software; you can redistribute it and/or modify it underthe terms of the GNU General Public License as published by the FreeSoftware Foundation; either version 2, or (at your option) any laterversion.Zebra is distributed in the hope that it will be useful, but WITHOUT ANYWARRANTY; without even the implied warranty of MERCHANTABILITY orFITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public Licensefor more details.You should have received a copy of the GNU General Public Licensealong with Zebra; see the file LICENSE.zebra.  If not, write to theFree Software Foundation, 59 Temple Place - Suite 330, Boston, MA02111-1307, USA.*/#include <stdio.h>#include <yaz/log.h>#include <yaz/pquery.h>#include "zebraapi.h"/* Small routine to display GRS-1 record variants ... *//* Copied verbatim from yaz/client/client.c */static void display_variant(Z_Variant *v, int level){    int i;    for (i = 0; i < v->num_triples; i++)    {	printf("%*sclass=%d,type=%d", level * 4, "", *v->triples[i]->zclass,	    *v->triples[i]->type);	if (v->triples[i]->which == Z_Triple_internationalString)	    printf(",value=%s\n", v->triples[i]->value.internationalString);	else	    printf("\n");    }} /* Small routine to display a GRS-1 record ... *//* Copied verbatim from yaz/client/client.c */static void display_grs1(Z_GenericRecord *r, int level){    int i;    if (!r)        return;    for (i = 0; i < r->num_elements; i++)    {        Z_TaggedElement *t;        printf("%*s", level * 4, "");        t = r->elements[i];        printf("(");        if (t->tagType)            printf("%d,", *t->tagType);        else            printf("?,");        if (t->tagValue->which == Z_StringOrNumeric_numeric)            printf("%d) ", *t->tagValue->u.numeric);        else            printf("%s) ", t->tagValue->u.string);        if (t->content->which == Z_ElementData_subtree)        {            printf("\n");            display_grs1(t->content->u.subtree, level+1);        }        else if (t->content->which == Z_ElementData_string)            printf("%s\n", t->content->u.string);        else if (t->content->which == Z_ElementData_numeric)	    printf("%d\n", *t->content->u.numeric);	else if (t->content->which == Z_ElementData_oid)	{	    int *ip = t->content->u.oid;	    oident *oent;	    if ((oent = oid_getentbyoid(t->content->u.oid)))		printf("OID: %s\n", oent->desc);	    else	    {		printf("{");		while (ip && *ip >= 0)		    printf(" %d", *(ip++));		printf(" }\n");	    }	}	else if (t->content->which == Z_ElementData_noDataRequested)	    printf("[No data requested]\n");	else if (t->content->which == Z_ElementData_elementEmpty)	    printf("[Element empty]\n");	else if (t->content->which == Z_ElementData_elementNotThere)	    printf("[Element not there]\n");	else            printf("??????\n");	if (t->appliedVariant)	    display_variant(t->appliedVariant, level+1);	if (t->metaData && t->metaData->supportedVariants)	{	    int c;	    printf("%*s---- variant list\n", (level+1)*4, "");	    for (c = 0; c < t->metaData->num_supportedVariants; c++)	    {		printf("%*svariant #%d\n", (level+1)*4, "", c);		display_variant(t->metaData->supportedVariants[c], level + 2);	    }	}    }}/* Small test main to illustrate the use of the C api */int main (int argc, char **argv){    /* odr is a handle to memory assocated with RETURNED data from       various functions */    ODR odr_input, odr_output;        /* zs is our Zebra Service - decribes whole server */    ZebraService zs;    /* zh is our Zebra Handle - describes database session */    ZebraHandle zh;        /* the database we specify in our example */    const char *base = "Default";    int argno;    nmem_init ();    yaz_log_init_file("apitest.log");    odr_input = odr_createmem (ODR_DECODE);        odr_output = odr_createmem (ODR_ENCODE);            zs = zebra_start ("zebra.cfg");    if (!zs)    {	printf ("zebra_start failed; missing zebra.cfg?\n");	exit (1);    }    /* open Zebra */    zh = zebra_open (zs);    if (!zh)    {	printf ("zebras_open failed\n");	exit (1);    }    zebra_select_databases (zh, 1, &base);    /* Each argument to main will be a query */    for (argno = 1; argno < argc; argno++)    {	/* parse the query and generate an RPN structure */	Z_RPNQuery *query = p_query_rpn (odr_input, PROTO_Z3950, argv[argno]);	char setname[64];	int errCode;	int i;        int hits;	char *errString;	ZebraRetrievalRecord *records;	int noOfRecordsToFetch;	/* bad query? */	if (!query)	{	    logf (LOG_WARN, "bad query %s\n", argv[argno]);	    odr_reset (odr_input);	    continue;	}	else	{	    char out_str[100];	    int r;#if 1	    r = zebra_string_norm (zh, 'w',				   argv[argno], strlen(argv[argno]),				   out_str, sizeof(out_str));	    if (r >= 0)	    {		printf ("norm: '%s'\n", out_str);	    }	    else	    {		printf ("norm fail: %d\n", r);	    }#endif	}	/* result set name will be called 1,2, etc */	sprintf (setname, "%d", argno);	/* fire up the search */	zebra_search_RPN (zh, odr_input, query, setname, &hits);		/* status ... */        zebra_result (zh, &errCode, &errString);		/* error? */	if (errCode)	{	    printf ("Zebra Search Error %d %s\n",		    errCode, errString);	    continue;	}	/* ok ... */	printf ("Zebra Search gave %d hits\n", hits);		/* Deterimine number of records to fetch ... */	if (hits > 10)	    noOfRecordsToFetch = 10;	else	    noOfRecordsToFetch = hits;	/* reset our memory - we've finished dealing with search */	odr_reset (odr_input); 	odr_reset (odr_output);	/* prepare to fetch ... */	records = odr_malloc (odr_input, sizeof(*records) * noOfRecordsToFetch);	/* specify position of each record to fetch */	/* first one is numbered 1 and NOT 0 */	for (i = 0; i<noOfRecordsToFetch; i++)	    records[i].position = i+1;	/* fetch them and request for GRS-1 records */	zebra_records_retrieve (zh, odr_input, setname, NULL, VAL_SUTRS,				noOfRecordsToFetch, records);	/* status ... */        zebra_result (zh, &errCode, &errString);	/* error ? */	if (errCode)	{	    printf ("Zebra Search Error %d %s\n",		    errCode, errString);	}	else	{	    /* inspect each record in result */	    for (i = 0; i<noOfRecordsToFetch; i++)	    {		printf ("Record %d\n", i+1);		/* error when fetching this record? */		if (records[i].errCode)		{		    printf ("  Error %d\n", records[i].errCode);		    continue;		}		/* GRS-1 record ? */		if (records[i].format == VAL_GRS1)		{		    Z_GenericRecord *grs_record =			(Z_GenericRecord *) records[i].buf;		    printf ("  GRS-1\n");		    display_grs1(grs_record, 0);		}                else if (records[i].format == VAL_SUTRS)                {                    printf ("  SUTRS\n");                    printf ("%.*s", records[i].len, records[i].buf);                }		/* some other record we don't handle yet... */		else		{		    printf ("  Other record (ignored)\n");		}	    }	}	/* reset our memory - we've finished dealing with present */	odr_reset (odr_input); 	odr_reset (odr_output);    }    odr_destroy (odr_input);    odr_destroy (odr_output);    zebra_close (zh);    zebra_stop (zs);    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -