0

Facebookにアプリがあります。ユーザーがオフラインであっても、ユーザーに代わって 1 時間ごとに見積もりを投稿します。しかし、php スクリプトを実行してユーザーのタイムラインに投稿すると、実際には 2 つの深刻な問題に直面しています。

まず、最も緊急なのは、BlackBerry、Samsung、iPhone などの新しいタッチ携帯電話からニュース フィードを読むときに、ユーザー名の下に「アプリ名経由」が表示されないことです。この点は非常に重要です。なぜなら、アプリのユーザーは「アプリ名を介して」せずに自分に代わって何かを直接投稿することを好まないからです。

次に、スクリプトの実行に約 40 秒かかりますが、これまでに 15 人のユーザーしかいません。助けてください。ここに私のPHPコードがあります:

<?PHP
require_once '../inc/config.php';

$dbh = new PDO('mysql:dbname=' . $db_name . ';host=' . $db_host . ';charset=utf8', $db_username, $db_password);

$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sqlid  = "SELECT fb_id FROM offline_access_users";
$sqlmsg = "SELECT msg_id,message FROM fb_messages WHERE msg_id = (SELECT MAX(msg_id) FROM fb_messages WHERE sent = 'No' ORDER BY msg_id)";

try {
    $stmt = $dbh->prepare($sqlid);

    $stmt->execute();

    $msg = $dbh->prepare($sqlmsg);

    $msg->execute();

    $msg_to = $msg->fetch();

    $msg_tosend = $msg_to['message'];

    $msg_tosendid = $msg_to['msg_id'];
}
catch (PDOException $e) {
    echo $e->getMessage();
    die();
}

while ($value = $stmt->fetch()) {
    $id  = $value['fb_id'];
    $url = "https://graph.facebook.com/" . $id . "/feed";

    $ch = curl_init();

    $attachment = array(

        'access_token' => $access_token,
        'message' => $msg_tosend,
        'app_id' => $fb_app_id,
        'from' => $fb_app_id,
        'display' => "touch",
        'to' => "",
        'redirect_uri' => "http://mydomain.com",
        'link' => "",
        'picture' => "",
        'source' => "",
        'caption' => "",
        'description' => "",
        'actions' => ""
    );

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FRESH_CONNECT, TRUE);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $attachment);

    $result = curl_exec($ch);
}

curl_close($ch);

$sqlupdate = "UPDATE fb_messages SET sent = 'Yes' WHERE msg_id=" . $msg_tosendid;

try {
    $stmt = $dbh->prepare($sqlupdate);

    $stmt->execute();
}
catch (PDOException $e) {
    echo $e->getMessage();
    die();
}

$db = null;

?>
4

1 に答える 1

0

1-「アプリ名による」最初の問題は、電話、タブレット用の公式Facebookアプリではほとんどサポートされていません。News Feedしかし、それでもWebブラウザから見ることができます。これはFacebookのポリシーであり、問​​題ではありません。Twitterの公式ウェブサイトのように。

2-これはコードとデータベースクエリの最適化問題です!、PHPを使用しているので、なぜ使用しないのFacebook PHP SDKですか?

PST:私はあなたが実際に何をしているのか知っています、あなたが多数の加入者を持っているときあなたは多くの問題に直面するでしょう、あなたはあなたの公開アルゴリズムを最適化する必要があります、そして同じ投稿を同時にすべてのユーザーに送ろうとしないでください時間、あなたのアプリケーションは禁止されます。

私は以前にこのスクリプトを作成しましたが、これらすべての問題が私に直面しました。それらをバイパスしてください。

于 2013-02-24T15:00:43.153 に答える