Initial commit
This commit is contained in:
commit
2330f71404
114
index.php
Normal file
114
index.php
Normal file
@ -0,0 +1,114 @@
|
||||
<?php
|
||||
// Functions
|
||||
function dbg($text) {
|
||||
//echo "$text\n";
|
||||
}
|
||||
|
||||
function checkTag($tag) {
|
||||
$tag = strtolower($tag);
|
||||
|
||||
// Check validity
|
||||
$re = "/^[_a-z0-9 :]*$/";
|
||||
preg_match($re, $tag, $matches);
|
||||
if (!$matches)
|
||||
die ("Meeeeeow!");
|
||||
|
||||
// Convert for file name
|
||||
$tag = substr($tag, 0, 40);
|
||||
$tag = str_replace(" ", "__", $tag);
|
||||
$tag = str_replace(":", "__", $tag);
|
||||
return $tag;
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
header('Content-Type: application/rss+xml; charset=UTF-8');
|
||||
|
||||
//if (!isset($_GET['debug']))
|
||||
// die("Nyan~~");
|
||||
|
||||
// Configuration here
|
||||
$refreshTime = 3600; // Update every hour
|
||||
$postLimit = 20; // Max. 100
|
||||
$dateFormat = "D, d M Y H:i:s O";
|
||||
|
||||
// Generate some variables
|
||||
if ($_GET['server'] == "danbooru")
|
||||
$selectedServer = "danbooru";
|
||||
else
|
||||
$selectedServer = "konachan";
|
||||
|
||||
$tag = $_GET['tag'];
|
||||
$santag = checkTag($tag);
|
||||
$tempfile = "/tmp/konasub/$selectedServer/$santag.xml";
|
||||
$selfUrl = "https://shimatta.de/konasub/?tag=$tag";
|
||||
dbg ("Tag: \"$tag\" ($santag, $tempfile)\n");
|
||||
mkdir ("/tmp/konasub/$selectedServer");
|
||||
|
||||
// Configure server urls and meta data
|
||||
$svr['konachan']['imgBase'] = "http://konachan.com/post/show/";
|
||||
$svr['konachan']['url'] = 'http://konachan.com/post.xml?tags=' . urlencode($tag) . "&limit=$postLimit";
|
||||
$svr['konachan']['title'] = "Konachan: " . htmlspecialchars($tag);
|
||||
$svr['konachan']['description'] = "Images for " . htmlspecialchars($tag);
|
||||
$svr['konachan']['link'] = "http://konachan.com/post?tags=" . urlencode($tag);
|
||||
$svr['konachan']['re'] = "/<post.* author=\\\"(?'author'[^\\ ]*)\\\".* created_at=\\\"(?'created_at'[^\\ ]*)\\\".* id=\\\"(?'id'[^\\ ]*)\\\".* jpeg_url=\\\"(?'jpeg_url'[^\\ ]*)\\\".* tags=\\\"(?'tags'[^\\\"]*)\\\"" . " .*\\/>/";
|
||||
|
||||
dbg ("File mtime delta: " . (time() - filemtime($tempfile)) . " (of $refreshTime)");
|
||||
if ((time() - filemtime($tempfile)) > $refreshTime) {
|
||||
$cacheFile = fopen($tempfile, "w");
|
||||
dbg (" -> Retrieving file...");
|
||||
$data = file_get_contents($svr[$selectedServer]['url']);
|
||||
fwrite($cacheFile, $data);
|
||||
flush();
|
||||
}
|
||||
else {
|
||||
$cacheFile = fopen($tempfile, "r");
|
||||
dbg (" -> Loading cached file...");
|
||||
$data = fread($cacheFile,filesize($tempfile));
|
||||
}
|
||||
fclose($cacheFile);
|
||||
|
||||
dbg("BEGIN XML:\n");
|
||||
|
||||
// RSS Header
|
||||
// TODO: Maybe change pubDate to date of latest image
|
||||
echo '<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<channel>
|
||||
<title>' . $svr[$selectedServer]['title'] . '</title>
|
||||
<description><![CDATA[' . $svr[$selectedServer]['description'] . ']]></description>
|
||||
<link>' . $svr[$selectedServer]['link'] . '</link>
|
||||
<lastBuildDate>' . date($dateFormat, time()) . ' </lastBuildDate>
|
||||
<pubDate>' . date($dateFormat, time()) . '</pubDate>
|
||||
<ttl>' . $refreshTime . '</ttl>
|
||||
<atom:link href="' . $selfUrl . '" rel="self" type="application/rss+xml" />
|
||||
';
|
||||
$all = explode("\n", $data);
|
||||
// <post.* id=\"(?'id'[^\ ]*)\".* jpeg_url=\"(?'jpeg_url'[^\ ]*)\" .*\/>
|
||||
|
||||
foreach ($all as $line) {
|
||||
preg_match($svr[$selectedServer]['re'], $line, $matches);
|
||||
if ($matches) {
|
||||
dbg ($matches['id'] . ", " . date($dateFormat, intval($matches['created_at'])) . "@" . $matches['jpeg_url'] . "\n");
|
||||
dbg (" " . $matches['tags'] . "\n");
|
||||
$imageLink = $svr[$selectedServer]['imgBase'] . intval($matches['id']);
|
||||
echo '
|
||||
<item>
|
||||
<title>' . "$matches[id]: $matches[tags]" . '</title>
|
||||
<description><![CDATA[<a href="' . $imageLink . '"><img src="' . $matches['jpeg_url']. '" style="width:100%"></a>]]></description>
|
||||
<link>' . $imageLink . '</link>
|
||||
<guid isPermaLink="true">' . $imageLink . '</guid>
|
||||
<pubDate>' . date($dateFormat, intval($matches['created_at'])) . '</pubDate>
|
||||
<dc:creator>' . $matches['author'] . '</dc:creator>
|
||||
</item>
|
||||
';
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
echo '
|
||||
</channel>
|
||||
</rss>
|
||||
';
|
||||
|
||||
dbg ("\nEND XML.");
|
||||
?>
|
Loading…
Reference in New Issue
Block a user