function pluginSecret()
 {
     return serendipity_event_twitter::pluginSecret();
 }
 function updateTwitterTimelineCache($parts)
 {
     global $serendipity;
     require_once S9Y_PEAR_PATH . 'HTTP/Request.php';
     if (count($parts) < 5) {
         return time() + 60 * 60;
     }
     // params corrupted next try allowed one minute later
     // Do we need to do OAuth?
     if (count($parts) > 6) {
         $idx_twitter = $parts[5];
         $idxmd5 = $parts[6];
         $idxmd5_test = md5(serendipity_event_twitter::pluginSecret() . "_{$idx_twitter}");
         if ($idxmd5_test != $idxmd5) {
             // Seems to be a hack!
             return time() + 60 * 60;
             // params corrupted next try allowed one minute later
         }
     }
     $show_rt = false;
     if (count($parts) > 7) {
         $features = $parts[7];
         $show_rt = strpos($features, 'r') !== false;
     }
     $cachetime = (int) $parts[4];
     $service = $parts[1];
     $username = str_replace('!', '_', $parts[2]);
     $cache_user = md5($service) . md5($username);
     $cachefile = $serendipity['serendipityPath'] . PATH_SMARTY_COMPILE . "/twitterresult.{$cache_user}.json";
     $nextcheck = time() + (int) $cachetime;
     if (file_exists($cachefile)) {
         $nextcheck = filemtime($cachefile) + $cachetime;
     }
     if (!file_exists($cachefile) || filemtime($cachefile) < time() - $cachetime) {
         $number = str_replace("!", "_", $parts[3]);
         $error = 200;
         // Default is: All OK
         if (!empty($idx_twitter)) {
             $search_twitter_uri = 'https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=' . $username . '&count=' . $number . '&trim_user=true';
             if (!$show_rt) {
                 $search_twitter_uri .= '&include_rts=false';
             }
             if ($idx_twitter == '1') {
                 $idx_twitter = '';
             }
             // First cfg is saved with empty suffix!
             $connection = $this->twitteroa_connect($idx_twitter);
             $connection->decode_json = false;
             $response = $connection->get($search_twitter_uri);
         } else {
             if ($service == 'identi.ca') {
                 $followme_url = 'http://identi.ca/' . $username;
                 $status_url = 'http://identi.ca/notice/';
                 $JSONcallback = 'identicaCallback2';
                 $service_url = 'http://identi.ca/api';
                 $search_twitter_uri = $service_url . '/statuses/user_timeline/' . $username . '.json?count=' . $number;
             } else {
                 $followme_url = 'https://twitter.com/' . $username;
                 $service_url = 'https://twitter.com';
                 $status_url = 'https://twitter.com/' . $username . '/statuses/';
                 $JSONcallback = 'twitterCallback2';
                 $search_twitter_uri = 'https://api.twitter.com/1/statuses/user_timeline.json?screen_name=' . $username . '&count=' . $number;
             }
             serendipity_request_start();
             $req = new HTTP_Request($search_twitter_uri);
             $req->sendRequest();
             $response = trim($req->getResponseBody());
             $error = $req->getResponseCode();
             serendipity_request_end();
         }
         $this->log("error: {$error}");
         if ($error == 200 && !empty($response)) {
             $this->log("Writing response into cache.");
             $fp = fopen($cachefile, 'w');
             fwrite($fp, serialize($response));
             fflush($fp);
             fclose($fp);
             $nextcheck = time() + (int) $cachetime;
             $this->log("Writing response into cache. DONE");
         }
     }
     return $nextcheck;
 }