【问题标题】:Twitter APIs not working on hosting [Works fine on localhost]Twitter API 不适用于托管 [在 localhost 上运行良好]
【发布时间】:2015-05-19 01:34:50
【问题描述】:

我正在开发一个应用程序来显示在给定地理位置(纬度和经度)的 1 英里半径内完成的推文。这是我的 PHP 代码,

<?php
// $lat = $_GET['lat'];
$lat = 26.511740;

// $long = $_GET['long'];
$long = 80.234973;

require_once("twitteroauth/twitteroauth.php"); //Path to twitteroauth library

$notweets = 100;

$consumerkey = "XXXX";
$consumersecret = "XXXX";
$accesstoken = "XXXX-XXXX";
$accesstokensecret = "XXXX"; 

function getConnectionWithAccessToken($cons_key, $cons_secret, $oauth_token, $oauth_token_secret) {
  $connection = new TwitterOAuth($cons_key, $cons_secret, $oauth_token, $oauth_token_secret);
  return $connection;
} 

$connection = getConnectionWithAccessToken($consumerkey,$consumersecret, $accesstoken, $accesstokensecret);

$tweets = $connection->get("https://api.twitter.com/1.1/search/tweets.json?geocode=".$lat.",".$long.",5mi&result_type=recent&count=".$notweets);

// echo $tweets;
echo json_encode($tweets);
?>

我正在使用 Wamp 服务器 (PHP V5.5.12),我的代码在它上面运行良好。但是当我在一些免费的托管网站上托管我的应用程序时(我尝试过 hosts.in 和 000webhost.com),这个脚本会失败并且只打印 'null'。

请帮我解决这个问题。

提前致谢。

【问题讨论】:

  • 只需将计数减少到 10 或 20 并尝试一下。可能是因为连接速度。当我在托管网站上尝试此操作时,它发生在我身上。
  • 它仍然无法正常工作。我猜这是因为托管站点阻止了一些 php 函数,而这个 api 正在使用其中之一。

标签: php twitter twitter-oauth


【解决方案1】:

我已经尝试过托管和 000webhost 以及其他几个。他们不工作的原因是连接到 twitter 的库使用 php curl,并且许多免费托管已禁用 curl,或者传出连接或 twitter 在来自免费托管服务器的 ips 时拒绝 curl 连接。对于我在互联网上读到的内容,这可能是因为许多黑客一直在搞乱 Twitter 和免费托管帐户的托管。所以找到一个与 Twitter API 一起使用的 cpanel 的免费主机是一个挑战,我已经尝试了 20 多个但它们不起作用,如果你尝试 curl 到 Twitter,其中一些会自动删除帐户或文件或阻止 ftp 访问/p>

【讨论】:

    【解决方案2】:

    可能与您可用的库相关。

    error_reporting(E_ALL) 添加到脚本顶部。

    检查 cURL 是否安装在廉价主机上,因为我相信这是 twitteroauth 需要的唯一 php 库。

    【讨论】:

      【解决方案3】:

      您的TwitterOAuth 版本是多少?您的代码似乎太旧了,与最新版本不兼容。

       

      <?php
      
      require "vendor/autoload.php";
      use Abraham\TwitterOAuth\TwitterOAuth;
      
      $lat = 26.511740;
      $long = 80.234973;
      $notweets = 100;
      
      $ck = "XXXX";
      $cs = "XXXX";
      $ot = "XXXX-XXXX";
      $os = "XXXX"; 
      
      $to = new TwitterOAuth($ck, $cs, $ot, $os);
      
      $tweets = $to->get('search/tweets', [
          'geocode' => "$lat,$long",
          'result_type' => 'recent',
          'count' => $notweets,
      ]);
      
      if (isset($tweets->errors[0]->message)) {
          echo 'Error: ' . $tweets->errors[0]->message;
      } elseif (!is_array($tweets)) {
          echo 'Unknown Error';
      } else {
          echo '<pre>';
          var_dump($tweets);
          echo '</pre>';
      }
      

      或者,您可以使用TwistOAuth 代替TwitterOAuth。我是这个库的作者。该库与TwitterOAuth 几乎兼容,但支持严格的异常处理。 错误原因总是要清楚。

       

      <?php
      
      require 'TwistOAuth.phar'; // Or 'vendor/autoload.php' for composer
      
      $lat = 26.511740;
      $long = 80.234973;
      $notweets = 100;
      
      $ck = "XXXX";
      $cs = "XXXX";
      $ot = "XXXX-XXXX";
      $os = "XXXX"; 
      
      try {
      
          $to = new TwistOAuth($ck, $cs, $ot, $os);
          $tweets = $to->get('search/tweets', [
              'geocode' => "$lat,$long",
              'result_type' => 'recent',
              'count' => $notweets,
          ]);
          echo '<pre>';
          var_dump($tweets);
          echo '</pre>';
      
      } catch (TwistException $e) {
      
          echo 'Error: ' . $e->getMessage();
      
      }
      

      你喜欢哪种代码?

      【讨论】:

      • 哦,抱歉,我没有看到[Works fine on localhost] 标签。但是,TwistOAuth 将始终确保为您提供错误原因,而TwitterOAuth 只返回 null。试试看。
      猜你喜欢
      • 2015-06-27
      • 2021-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 2018-04-10
      相关资源
      最近更新 更多