diff options
author | emkael <emkael@tlen.pl> | 2016-12-27 14:37:42 +0100 |
---|---|---|
committer | emkael <emkael@tlen.pl> | 2016-12-27 14:37:42 +0100 |
commit | 4d80ef582eae06edd785db3d0e4bdf94d83cf537 (patch) | |
tree | 353339f6e6c56fdc0b0ce2497e301b26df1baa39 /http/index.php | |
parent | 0f90768414cfd4c779f8ac51573fcfa0695a13ff (diff) |
* initial commit
Diffstat (limited to 'http/index.php')
-rw-r--r-- | http/index.php | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/http/index.php b/http/index.php new file mode 100644 index 0000000..cf2f636 --- /dev/null +++ b/http/index.php @@ -0,0 +1,108 @@ +<?php + +$config = json_decode(file_get_contents('config.json'), TRUE); + +require_once('codebird-php/src/codebird.php'); + +\Codebird\Codebird::setConsumerKey($config['key'], $config['secret']); +\Codebird\Codebird::setBearerToken($config['token']); + +$cb = \Codebird\Codebird::getInstance(); + +$user = $_GET['user']; +$spamFilter = FALSE; + +$filterMatch = []; +if (preg_match('/^(.*)\/spamfilter$/', $user, $filterMatch)) { + $user = $filterMatch[1]; + $spamFilter = TRUE; +} + +if ($user) { + + $cacheFile = 'cache/'.$user.'.json'; + $cacheTime = file_exists($cacheFile) ? filemtime($cacheFile) : 0; + + $content = ''; + if ($cacheTime > strtotime('-15 minutes')) { + $content = json_decode(file_get_contents($cacheFile)); + } + else { + $content = $cb->statuses_userTimeline([ + 'screen_name' => $user, + 'count' => 200, + 'exclude_replies' => TRUE + ], TRUE); + if (isset($content->rate)) { + unset($content->rate); + } + file_put_contents($cacheFile, json_encode($content)); + $cacheTime = time(); + } + + if ($content->httpstatus !== 200) { + header('HTTP/1.1 '.$content->httpstatus); + if (isset($content->error)) { + print $content->error; + die(); + } + if (isset($content->errors)) { + foreach ($content->errors as $error) { + print $error->message.' ('.$error->code.')<br />'; + } + die(); + } + } + + unset($content->httpstatus); + + if ($spamFilter) { + $filteredContent = []; + foreach ($content as $c) { + $urls = array_map( + function($url) { + return $url->expanded_url; + }, + $c->entities->urls + ); + if (!$urls) { + $filteredContent[] = $c; + } else { + sort($urls); + $urlHash = md5(implode('|', $urls)); + $filteredContent[$urlHash] = $c; + } + } + usort($filteredContent, function($c1, $c2) { return strcmp($c1->id_str, $c2->id_str); }); + array_reverse($filteredContent); + $content = $filteredContent; + } + + require_once('smarty3/Smarty.class.php'); + + $smarty = new Smarty(); + $smarty->setCacheDir('cache/smarty'); + $smarty->setCompileDir('cache/smarty/compile'); + $smarty->setTemplateDir('templates'); + + $smarty->assign('cacheTime', $cacheTime); + $smarty->assign('user', $user); + $smarty->assign('content', $content); + + $format = $_GET['format']; + + switch ($format) { + case 'rss': + header('Content-Type: application/rss+xml'); + $smarty->display('rss.tpl'); + break; + case 'atom': + default: + header('Content-Type: application/atom+xml'); + $smarty->display('atom.tpl'); + break; + } + +} + +?> |