1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
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;
}
}
?>
|