X-Git-Url: https://git.ao2.it/tweeper.git/blobdiff_plain/1e7a09621f810d54f9badc8bcf3f01a6c6ae2347..af103c976dd4992d79e9d9a71837aecff30d6e9c:/src/Tweeper.php?ds=inline diff --git a/src/Tweeper.php b/src/Tweeper.php index e98623b..5b9f235 100644 --- a/src/Tweeper.php +++ b/src/Tweeper.php @@ -36,7 +36,7 @@ date_default_timezone_set('UTC'); */ class Tweeper { - private static $userAgent = "Mozilla/5.0"; + private static $userAgent = "Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J)"; private static $maxConnectionTimeout = 5; private static $maxConnectionRetries = 5; @@ -87,6 +87,46 @@ class Tweeper { } /** + * Convert Twitter mobile date to the date format expected in a RSS document. + */ + public static function twitterToRssDate($date) { + // Twitter uses relative timestamps in minutes for recent tweets. + if (preg_match('/^(\d+)m$/', $date, $matches)) { + $timestamp = strtotime("+" . $matches[1] . " min", time()); + if (FALSE === $timestamp) { + $timestamp = 0; + } + } + else { + /* + * In case the time is specified put it after the date, + * to make it recognized by strptime(). + */ + if (preg_match('/(.*) - (.*)/', $date, $matches)) { + $date = $matches[2] . " " . $matches[1]; + } + + $timestamp = strtotime($date); + if (FALSE === $timestamp) { + $timestamp = 0; + } + + /* + * The twitter mobile UI usually only specifies the month and the day, so + * strtotime($date) may interpret the date as being in the future. + * + * If the date is in the future it is probably in the same day but in the + * previous year. + */ + if ($timestamp > time()) { + $timestamp = strtotime('-1 years', $timestamp); + } + } + + return Tweeper::epochToRssDate($timestamp); + } + + /** * Convert string to UpperCamelCase. */ public static function toUpperCamelCase($str, $delim = ' ') {