summaryrefslogtreecommitdiff
path: root/darwin/query.class
blob: f0a5b7ec2e44efdb626b9040bae2a90b15ddb008 (plain)
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 */
?>