0

私のウェブサイトのユーザーは、Twitterにログインして、自分のステータスを私のウェブサイトとTwitterに一度に投稿できます。Twitterに接続するためにhttps://github.com/abraham/twitteroauthを使用しています。ログインと投稿は、ウェブサイトのさまざまなページで実行されます。

これはログインスクリプトです:

public function loginTwitter() {
        $twitter = new TwitterOAuth(
                            $this->getContext()->params['social']['twitter']['consumerKey'],
                            $this->getContext()->params['social']['twitter']['consumerSecret']
            );
            $request_token = $twitter->getRequestToken($this->link('//User:connectFromTwitter'));

    // Saving to session (Nette Framework)
            $twitterSession = $this->getContext()->session->getSection('twSes');
            $twitterSession->oauth_request_token = $token = $request_token['oauth_token'];
            $twitterSession->oauth_request_token_secret = $request_token['oauth_token_secret'];

            if ($twitter->http_code == 200) {
                $requestLink = $twitter->getAuthorizeURL($token);
                $this->redirectUrl($requestLink);
            } else {
                echo 'Error';
            }
}

これはコールバックスクリプトです(ユーザーがログインした直後に投稿が機能します):

public function twitterOauth() {
    // $_GET parameter oauth_verifier
        $oauthVerifier = $this->getParam('oauth_verifier');

            // Session section
            $twitterSession = $this->getContext()->session->getSection('twSes');

            $twitter = new TwitterOAuth(
                            $this->getContext()->params['social']['twitter']['consumerKey'],
                            $this->getContext()->params['social']['twitter']['consumerSecret'],
                            $twitterSession->oauth_request_token,
                            $twitterSession->oauth_request_token_secret
            );

            $access_token = $twitter->getAccessToken($oauthVerifier);
            $twitterSession->access_token = $access_token;
            $user_info = $twitter->get('account/verify_credentials');

            // Saving to DB to be able to post without login
            $tm = new TwitterUserManager();
            if (!$tm->isInDatabase($this->getUser()->getId())) {
                $tu = new TwitterUser();
                $tu->setUser($this->loggedUser);
                $tu->setOauthProvider('twitter');
                $tu->setOauthUid("'".$user_info->id."'");
                $tu->setUsername("'".$user_info->screen_name."'");
                $tu->setOauthToken("'".$access_token['oauth_token']."'"); // Saving the access token for further posting
                $tu->setOauthSecret("'".$access_token['oauth_token_secret']."'");
                $tm->persist($tu);
            }

            $twitter->post('statuses/update', array('status' => 'Hello ' . date('d.m.Y H:i:s'))); // <== HERE IT WORKS

            $this->redirect('User:socialConnect'); // Redirect to another page
}

これは投稿機能です(ユーザーは任意のページから投稿します):

    public function postToTwitter() {
        $twitterSession = $this->getContext()->session->getSection('twitter');

            $twitter = new TwitterOAuth(
                            $this->getContext()->params['social']['twitter']['consumerKey'],
                            $this->getContext()->params['social']['twitter']['consumerSecret'],
                            $twitterSession->access_token['oauth_token'],
                            $twitterSession->access_token['oauth_token_secret']
            );

            return $twitter->post('statuses/update', array('status' => 'Hello' . date('d.m.Y H:i:s')));
}

投稿機能を使用すると、次のエラーが発生します。

stdClass(2) {
       request => "/1/statuses/update.json" (23)
       error => "Could not authenticate you." (27)
    }

よろしくお願いします。

編集:解決策:

これを使用してTwitter に接続します(すべての情報をDBに保存します):http: //framework.zend.com/manual/1.12/en/zend.oauth.introduction.html

これを使用して、任意のページ から投稿します:http: //framework.zend.com/manual/1.12/en/zend.service.twitter.html

良い例: http: //www.joeyrivera.com/2010/twitter-api-oauth-authentication-and-zend_oauth-tutorial/

4

1 に答える 1

2

私はいつもZend-Framework-Componentを使用していました:http://framework.zend.com/manual/1.12/en/zend.service.twitter.html

簡単だと思いますが、動作することを確認できました。チュートリアルを読むだけです(上記のリンクを参照)。

于 2012-12-18T08:08:53.010 に答える