PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tracker Such API


Stifler
06.09.2011, 14:38
Hi!

Ich habe mir überlegt ob es nicht toll wäre anstatt auf jedem Tracker einzeln nach etwas bestimmten zu Suchen, mit einer Suchmaschine dies Abzufragen.

Hier zu habe ich eine API gebastelt die eine XML Ausgabe erzeugt!

Beispiel mit dem Suchbegriff "cou": http://screamlabs.at/chatcommunity/index.php?service=tracker&request=apisearch&search=cou

Die Suchmaschine liest die XML aus und gibt in einer Tabelle das Ergebnis aus:
Suche: http://screamlabs.at/test/search.php
Suchergebnis mit "cou": http://screamlabs.at/test/search.php?search=cou

Wer hätte Lust diese API auf seinem Tracker zu testen?

PS: Um Mißbrauch zu verhindern kann jeder einen API Schlüssel in der API eintragen den dann nur die Suchmaschine weiß!

Quellcode:
<?

/*
##########################################
## Coded by Stifler ##
## 2011 ##
##########################################
*/

require_once("include/bittorrent.php");

$api_version = "1.0";
$apikey = "";
$tracker_name = "";
$tracker_url = "";
$download_url = ""; // http://www.tracker.com/download.php?id={ID} ({ID} NICHT ersetzen!)
$view_url = ""; // http://www.tracker.com/details.php?id={ID} ({ID} NICHT ersetzen!)
$min_string = 3;
$search_limit = 50;

dbconn();

function checkfilename($filename)
{
$s = $filename;
$s = str_replace(array("Ä", "Ö", "Ü", "ä", "ö", "ü", "ß"),
array("Ae", "Oe", "Ue", "ae", "oe", "ue", "ss"),
$s);

return $s;
}

function xml_error($error_code, $error_string)
{
global $api_version, $tracker_name, $tracker_url, $search;

$xml = "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>\n".
"<infos>\n".
"<api>\n".
"<version>".$api_version."</version>\n".
"</api>\n".
"<info>\n".
"<tracker>".checkfilename($tracker_name)."</tracker>\n".
"<url>".str_replace("&", "&amp;", $tracker_url)."</url>\n".
"<search>".$search."</search>\n".
"</info>\n".
"<error>\n".
"<id>".$error_code."</id>\n".
"<message>".checkfilename($error_string)."</message>\n".
"</error>\n
</infos>\n";

header("Content-Type: text/xml; charset=utf-8");

echo $xml;

exit();

}

$key = mysql_real_escape_string(trim(rawurldecode($_REQUEST[apikey])));
$search = mysql_real_escape_string(trim(rawurldecode($_REQUEST[search])));

if($key != md5($apikey)) {

xml_error(1, "Invalid API Key (Ungültiger API-Schlüssel)");

}
elseif($search == "" || strlen($search) < $min_string) {

xml_error(2, "Invalid String Length (Ungültige String-Länge)");

}

$query = mysql_query("SELECT id, name, size, seeders, leechers, times_completed FROM torrents WHERE name LIKE '%".$search."%' AND status='1' ORDER BY 'id' DESC LIMIT $search_limit");

$xml = "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>\n".
"<infos>\n".
"<api>\n".
"<version>".$api_version."</version>\n".
"</api>\n".
"<info>\n".
"<tracker>".checkfilename($tracker_name)."</tracker>\n".
"<url>".str_replace("&", "&amp;", $tracker_url)."</url>\n".
"<download>".str_replace("&", "&amp;", $download_url)."</download>\n".
"<view>".str_replace("&", "&amp;", $view_url)."</view>\n".
"<search>".$search."</search>\n".
"<limit>".$search_limit."</limit>\n".
"<min>".$min_string."</min>\n".
"</info>\n";

while($result = mysql_fetch_array($query)) {

$id = intval($result["id"]);
$name = checkfilename($result["name"]);
$size = intval($result["size"]);
$seeder = intval($result["seeders"]);
$leecher = intval($result["leechers"]);
$completed = intval($result["times_completed"]);

$xml .= "<file>\n".
"<id>".$id."</id>\n".
"<name>".$name."</name>\n".
"<size>".$size."</size>\n".
"<seeder>".$seeder."</seeder>\n".
"<leecher>".$leecher."</leecher>\n".
"<completed>".$completed."</completed>\n".
"</file>\n";

}

$xml .= "</infos>";

header("Content-Type: text/xml; charset=utf-8");

echo $xml;

exit();

?>

Lex
06.09.2011, 14:44
Die Idee hatte ich auch schon, bezw hab ich auch schon umgesetzt. Hatte den XML Output gebastelt, nur leider kam June nicht dazu das einlesen zu entwickeln daher ging das ganze wiedermal nicht so voran wie gewollt. Mit deiner Klasse zum auslesen des XML wird das aber sicher kein Problem sein. Bin mir sicher wir bekommen diese Suche sogar sourcenübergreifend hin.

Lg Lex

Stifler
07.09.2011, 18:07
API ist nun Online!

Lex
07.09.2011, 19:18
Genau das war auch bei meiner Idee damals der haken, man muss die DB daten eintragen, das macht keiner der keine Ahnung hat freiwillig.
Am besten wäre die dbconn() Funktion zu nutzen.

Lg Lex

Stifler
07.09.2011, 19:44
WUrde geändert!

Zero111
07.09.2011, 21:33
wäre vlt eine Idee wert das ins PartnerCenter einzubauen.

So dass Partner gegenseitig auf auf Partnertracker suchen können.

Beim erstellen wird automatisch ein Api Key generiert der dem Partner mitgeteilt wird.

Vorteil der Geschichte wäre dass dann ein System zum senden der daten und empfang/verarbeitung benutzt wird und das ganze direkt mit dem Partner verknüft wird

Stifler
07.09.2011, 22:09
Ja Funktionieren tut es auf jeden Fall schon mal!
Und die Suchseite hab ich jetzt auch etwas aufgemotzt!