src/Tweeper.php: only override the User-Agent to a mobile one for twitter.com
[tweeper.git] / src / Tweeper.php
index 091b030..f1d579f 100644 (file)
@@ -36,7 +36,7 @@ date_default_timezone_set('UTC');
  */
 class Tweeper {
 
-  private static $userAgent = "Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J)";
+  private static $userAgent = "Mozilla/5.0";
   private static $maxConnectionTimeout = 5;
   private static $maxConnectionRetries = 5;
 
@@ -157,7 +157,7 @@ class Tweeper {
   /**
    * Get the contents from a URL.
    */
-  private static function getUrlContents($url) {
+  private static function getUrlContents($url, $user_agent = NULL) {
     $ch = curl_init($url);
     curl_setopt_array($ch, [
       CURLOPT_HEADER => FALSE,
@@ -167,7 +167,7 @@ class Tweeper {
       CURLOPT_COOKIEFILE => "",
       CURLOPT_RETURNTRANSFER => TRUE,
       CURLOPT_HTTPHEADER => ['Accept-language: en'],
-      CURLOPT_USERAGENT => Tweeper::$userAgent,
+      CURLOPT_USERAGENT => isset($user_agent) ? $user_agent : Tweeper::$userAgent,
     ]);
     $contents = Tweeper::curlExec($ch);
     curl_close($ch);
@@ -178,7 +178,7 @@ class Tweeper {
   /**
    * Get the headers from a URL.
    */
-  private static function getUrlInfo($url) {
+  private static function getUrlInfo($url, $user_agent = NULL) {
     $ch = curl_init($url);
     curl_setopt_array($ch, [
       CURLOPT_HEADER => TRUE,
@@ -187,7 +187,7 @@ class Tweeper {
       // Follow http redirects to get the real URL.
       CURLOPT_FOLLOWLOCATION => TRUE,
       CURLOPT_RETURNTRANSFER => TRUE,
-      CURLOPT_USERAGENT => Tweeper::$userAgent,
+      CURLOPT_USERAGENT => isset($user_agent) ? $user_agent : Tweeper::$userAgent,
     ]);
 
     $ret = Tweeper::curlExec($ch);
@@ -455,7 +455,15 @@ class Tweeper {
       return NULL;
     }
 
-    $html = Tweeper::getUrlContents($src_url);
+    // Override User-Agent for twitter.com to force it to serve the mobile UI.
+    if ($host == "twitter.com") {
+      $user_agent = "Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J)";
+    }
+    else {
+      $user_agent = NULL;
+    }
+
+    $html = Tweeper::getUrlContents($src_url, $user_agent);
     if (FALSE === $html) {
       trigger_error("Failed to retrieve $src_url", E_USER_WARNING);
       return NULL;