0

管理者によって公開されたアクティビティを、友人だけでなく、ネットワークのすべてのメンバーに表示されるようにしようとしています。今まで私ができる限り、テーブル ストリームが私のメッセージが公開されるのを妨げているということです。それはプロフィール メッセージを作成するだけです。フィードでのみ表示されます。これを強制する方法を知っている人はいますか?

[編集] 以下のコードは、自分のアカウントでツイートを選択しています。作成したいくつかの設定を使用しています (twitter の screen_name や、フィードでツイートを公開しているユーザーなど)。コードは次のように実行されます: -> twitter ユーザーがメッセージを読むための設定があるかどうかを確認します。-> テーブルに保存 -> (理論的には) 誰もがこのメッセージを読むことを許可します。イーサは発行者の友人であるかどうか。-> 私も作成したアクティビティを追加します。

$TwitterUser = Engine_Api::_ ()->getApi ( 'settings', 'core' )->getSetting ( 'core.twitter.screen_name' );

if ($TwitterUser != '') {
    // Ultimo tweet postado
    $TwitterUser = Engine_Api::_ ()->getApi ( 'settings', 'core' )->getSetting ( 'core.twitter.screen_name' );
    $table = Engine_Api::_ ()->getDbtable ( 'tweets', 'user' );
    $query = $table->select ()->order ( 'tweets_id desc')->limit(1);

    $lastTweet = $table->fetchRow ( $query );
    // Set the configuration parameters
    $config = array ('adapter' => 'Zend_Http_Client_Adapter_Socket', 'ssltransport' => 'tls' );

    // Instantiate a client object
    if (is_null ( $lastTweet )) {
        $client = new Zend_Http_Client ( "http://api.twitter.com/1/statuses/user_timeline.json?screen_name=$TwitterUser&count=4&include_rts=1", $config );
    } else {
        $client = new Zend_Http_Client ( "http://api.twitter.com/1/statuses/user_timeline.json?screen_name=$TwitterUser&include_rts=1&since_id=" . $lastTweet->real_id, $config );
    }
    // The following request will be sent over a TLS secure connection.
    $response = $client->request ();    
    // Pegando a resposta
    $body = json_decode ( $response->getBody () );
    if (! empty ( $body )) {
        $db = Engine_Api::_()->getDbtable('tweets', 'user')->getAdapter();
        $db->beginTransaction();

        try
        {
        $table = Engine_Api::_ ()->getDbtable ( 'users', 'user' );
        $twitter_user = $table->fetchRow ( $table->select ()->where ( 'user_id = ?', Engine_Api::_ ()->getApi ( 'settings', 'core' )->getSetting ( 'core.twitter.user_id' ) ) );
        $table = Engine_Api::_ ()->getDbtable ( 'tweets', 'user' );
        $activityApi = Engine_Api::_ ()->getDbtable ( 'actions', 'activity' );
        foreach ( array_reverse($body) as $tweet ) {
            $data = explode ( ' ', $tweet->created_at );
            $meses = array ('Jan' => '01', 'Fev' => '02', 'Mar' => '03', 'Apr' => '04', 'May' => '05', 'Jun' => '06', 'Jul' => '07', 'Aug' => '08', 'Sep' => '09', 'Oct' => '10', 'Nov' => '11', 'Dec' => '12' );
            $tweet_date = $data ['5'] . "-" . $meses [$data [1]] . '-' . $data [2] . " " . $data [3];
            $tweet_date = (date ( 'Y-m-d H:i:s', strtotime ( $tweet_date ) ));
            $last_tweet = $table->createRow();
            $last_tweet->setFromArray(array(
                    'real_id' => $tweet->id_str,
                    'user_id' => $tweet->user->id_str,
                    'screen_name' => $tweet->user->screen_name,
                    'body' => $tweet->text,
                    'retweeted' => $tweet->retweeted,
                    'created_at' => $tweet_date,
                    'profile_image_url' => $tweet->user->profile_image_url,
                    'coordinates' => $tweet->coordinates
            ));
            $last_tweet->save();
            // Authorizations
            $auth = Engine_Api::_()->authorization()->context;
            $auth->setAllowed($last_tweet, 'everyone', 'view',    true);
            $auth->setAllowed($last_tweet, 'everyone', 'comment', true);
            $auth->setAllowed($last_tweet, 'everyone', 'likes', true);
            $action = $activityApi->addActivity ($twitter_user,$last_tweet, 'post_twitter', $tweet->text);
            if( $action ) {
                $activityApi->attachActivity($action, $last_tweet);
            }
        }
        // Commit
        $db->commit();
        } catch ( Exception $e ) {
                $db->rollBack ();
                throw $e;
            }
        }
}

問題は発生しませんが、私が追跡しているツイートは、私が公開したユーザーによってのみ赤くなる可能性があります。

4

1 に答える 1

0

この action_id のストリーム テーブルにエントリを作成する必要があります。

于 2012-08-19T20:10:57.837 に答える