blob: a48549954e98b41082150d306a1d2486d4bdf544 [file] [log] [blame]
<?
require_once "config.php";
class URLReader{
var $_handler;
var $_url_info; // Used when relative paths are given in the links
function URLReader($url){
$start = strpos($url,"//") + strlen("//");
$end = strpos($url,"/",$start);
$host = substr($url,$start,$end-$start);
$path = substr($url,$end);
// Use sockets otherwise cgi fail to open
if ($this->_handler = @fsockopen($host, 80, $errno, $errstr, 5)) {
fputs($this->_handler, "GET $path HTTP/1.0\r\n");
fputs($this->_handler, "Host: $host\r\n");
fputs($this->_handler, "User-Agent: {$_SERVER['HTTP_USER_AGENT']}\r\n");
fputs($this->_handler, "\r\n");
}else
die("Unable to connect: $errno :: $errstr");
$end = strrpos($url,"/") + 1; // Find last forward slash
$end = strlen($url) - $end; // Get actual number of chars
$end *= -1; // Search from the end
$this->_url_info = substr($url,0,$end);
}
function getLinksAfterAName($aname){
$str = "";
while(!feof($this->_handler)){
$buff = fgets($this->_handler,4096);
if (stristr($buff,"<a name")) // Found <a name=""> element
if (stristr($buff,$aname)){ // Found the one we are looking for
while(!feof($this->_handler)){
$buff = fgets($this->_handler,4096);
if (stristr($buff,"<a href")){ // return all links
if (!stristr($buff,"</a>"))
$buff = str_replace("\n","",$buff);
$str .= $buff;
while(!stristr($buff,"</a>")){ // not always on one line
$buff = fgets($this->_handler,4096);
if (!stristr($buff,"</a>"))
$buff = str_replace("\n","",$buff);
$str .= $buff;
}
}
if (stristr($buff,"<a name") || stristr($buff,"</ul>") ||
stristr($buff,"</table>") || stristr($buff,"</ol>")){
$str = substr($str,0,-1); // Remove last \n
return $str;
}
}
}
}
return $str;
}
function getReleases($aname,$ignore_RC_and_M = true){
$releases = array();
$str = $this->getLinksAfterAName($aname);
if ($str == "") // "<a name>" not found
return $releases;
$arr = explode("\n",$str);
for($i=0;$i<count($arr);$i++){
if (!preg_match(DDD,$arr[$i])) // No digit-dot-digit version
continue;
if ($ignore_RC_and_M && preg_match(RCM,$arr[$i])) // RC & M patterns
continue;
$begin_pos = strpos($arr[$i],"<a href=") + strlen("<a href=");
$end_pos = strpos($arr[$i],">",$begin_pos);
$tmp_pos = $end_pos; // Save for next search
$end_pos -= $begin_pos;
$tmp_str = substr($arr[$i],$begin_pos,$end_pos);
$link = str_replace("\"","",$tmp_str); // Get actual link
if (!strstr($link,"tp://")) // Check for relative positioning
$link = $this->_url_info.$link;
$begin_pos = $tmp_pos + 1;
$end_pos = strpos($arr[$i],"<",$begin_pos);
$end_pos -= $begin_pos;
$name = substr($arr[$i],$begin_pos,$end_pos); // Get name for link
$name = str_replace(" ","",$name);
$releases[$name] = $link;
}
return $releases;
}
}
?>