推特API在托管环境下无法工作[本地环境正常工作]

3

我正在开发一款应用程序,以展示在给定地理位置(纬度和经度)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),我的代码在上面运行良好。但是当我将我的应用程序托管到一些免费的托管网站上(我已经尝试了hostinger.in和000webhost.com),这个脚本会失败并只打印“null”。
请帮助我解决这个问题。
提前致谢。

只需将计数减少到10或20并尝试。可能是由于连接速度的原因。当我在托管站点上尝试时,这种情况也发生在我身上。 - Yuva Raj
仍然无法正常工作。我猜测是因为托管网站阻止了一些PHP函数,而此API正在使用其中之一。 - Himanshu
3个回答

3

我尝试过Hostinger、000webhost和其他几个免费主机。它们不能正常工作的原因是连接Twitter的库使用了PHP cURL,而许多免费主机已禁用cURL或出站连接,或当来自免费主机服务器IP时,Twitter拒绝cURL连接。根据我在互联网上阅读的内容,这可能是因为许多黑客一直在利用来自免费主机帐户的Twitter并进行破坏。因此,找到一个与Twitter API配合工作的免费带有cPanel的主机是一项挑战。我尝试了20多个,但它们都不起作用,其中一些会自动删除帐户或文件,或者如果您尝试使用cURL连接到Twitter,则会阻止FTP访问。


2
很可能与您可用的库相关。
在脚本顶部添加 error_reporting(E_ALL)
检查cURL是否已在廉价主机上安装,因为我认为这是twitteroauth需要的唯一php库。

0
你的 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();

}

你喜欢哪种编程语言?


哦,抱歉,我没有看到“[在本地主机上运行良好]”标签。然而,“TwistOAuth”将始终确保为您提供错误原因,而“TwitterOAuth”只返回null。试试看。 - mpyw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接