1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
<?php
/*
** $Id$
**
** itools/darwin/query.class - Query the UltraDarwin 3000 Search Engine
**
** Requires: global $it_text object to determine result language
**
** $Log$
** Revision 1.4 2000/05/08 16:01:21 cschneid
** Removed need to global $it_text object
**
** Revision 1.3 2000/05/08 15:44:18 cschneid
** Allow absolute http:// url to search binary
**
** Revision 1.2 2000/01/16 22:46:02 weber
** Renamed query to result to avoid confusion
**
** Revision 1.1 2000/01/12 02:26:21 weber
** Added darwin query class
**
**
*/
class it_darwin_query
{
/* Public Result information (read only) */
var $totalresults; /* Total number of results found */
var $firstresult; /* first fetched result */
var $lastresult; /* last fetched result */
/* Parameters (read only) */
var $service; /* Service identifier for query URL */
var $resultsperpage; /* Number of results to show per page */
/* Private */
var $result; /* Raw query result array */
var $resptr; /* Result array pointer */
/* Constructor */
function it_darwin_query($service, $resultsperpage=10)
{
if (!ereg('^http://', $service))
$service = "http://ultrasearch.relog.ch/$service/Search";
$this->service = $service;
$this->resultsperpage = $resultsperpage;
$this->totalresults = $this->firstresult = $this->lastresult = 0;
}
/*
** Perform a query for $q starting at $rank. Return true on success,
** false on error (no results is not an error)
*/
function query($q, $rank=0)
{
global $it_text;
if (is_object($it_text))
$lang = "&lang=" . $it_text->get_language();
$url = $this->service . "?q=" . urlencode($q) . "$lang&rank=$rank&n=" . $this->resultsperpage;
/* debug("it_darwin::query(\"$url\",$rank)"); */
if ($this->result = file($url))
{
$this->totalresults = trim($this->result[2]);
$this->firstresult = trim($this->result[3]);
$this->lastresult = trim($this->result[4]);
$this->resptr = $this->firstresult;
return 1;
}
return 0;
}
/* Fetch a result as an array "url", "title", "description", "size", "date" */
function fetch_array($number="XX")
{
/* debug("fetch_array($number), resptr==$this->resptr"); */
if ($number != "XX")
$this->resptr = $number;
if (($this->resptr >= $this->firstresult) && ($this->resptr <= $this->lastresult))
{
$n = 5+($this->resptr-$this->firstresult)*5; /* start of result record */
$this->resptr+=1; /* Spinn ich?? ++ geht nicht !! */
return array("url" => trim($this->result[$n]), "title" => trim($this->result[$n+1]), "description" => trim($this->result[$n+2]), "size" => trim($this->result[$n+3])*1024, "date" => trim($this->result[$n+4]));
}
else return 0; /* Out of bounds */
}
} /* End class it_darwin_query */
?>
|