| <? |
| |
| 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; |
| } |
| } |
| |
| ?> |