>  기사  >  웹 프론트엔드  >  최신 Twitter API를 사용하여 Twitter 위젯 디자인

최신 Twitter API를 사용하여 Twitter 위젯 디자인

PHPz
PHPz원래의
2023-09-04 16:13:01816검색

Twitter는 API 버전 1.1을 출시하면서 몇 가지 변경 사항을 적용하고 있습니다. 가장 중요한 변화 중 하나는 인증 도입입니다. 즉, API에 요청을 보내려면 애플리케이션을 인증해야 합니다.

인증은 간단하고 표준적인 방법을 통해 보안 인증을 허용하고 사용자 승인을 허용하는 개방형 프로토콜인 OAuth에 의해 구동됩니다. 비밀번호를 공유하지 않고 대신 행동하도록 신청하세요.

이 튜토리얼에서는 트위터 사용자가 게시한 최신 트윗 목록을 표시하는 트위터 타임라인 WordPress 위젯을 개발하면서 프로그래밍 방식으로 트위터 API와 상호 작용하는 방법을 알아봅니다.

다음은 이 튜토리얼의 마지막 부분에서 구축하게 될 트위터 타임라인 위젯의 미리보기입니다.

利用最新的 Twitter API 设计 Twitter 小部件

Twitter API에 요청을 성공적으로 보내려면 승인되지 않은 요청이 거부되지 않으므로 OAuth 승인이 있는 앱 허용하다.

트위터 애플리케이션을 만들려면 트위터에 로그인해야 합니다. Twitter 계정에 개발자 대시보드를 사용하세요. 만들기 위한 포인트 애플리케이션은 단순히 자신(및 Twitter)에게 키 세트를 제공합니다.

여기에는 다음이 포함됩니다.

  • 소비자 키
  • 소비자의 비밀
  • 액세스 토큰
  • 액세스 토큰 비밀

아래 단계에 따라 Twitter 애플리케이션을 만들고 키를 생성하세요.

  • 트위터 계정을 사용하여 트위터 개발자 계정에 로그인하고 애플리케이션 관리 콘솔로 이동하세요.

  • 트위터 앱 생성을 시작하려면 새 앱 만들기 버튼을 클릭하세요.
  • 양식을 작성하고 제출 버튼을 클릭하여 신청서를 작성하세요.
  • 앱을 클릭하고 권한 탭으로 이동한 후 액세스 수준을 읽기 및 쓰기로 변경하세요.

    이 API를 올바르게 사용하기 위해 작업을 수행하려면 다음을 변경해야 합니다. 다음 이외의 작업을 수행하는 경우 설정을 읽기 및 쓰기로 설정하세요. GET 요청을 사용한 표준 데이터 검색.

    利用最新的 Twitter API 设计 Twitter 小部件

애플리케이션 소비자 키와 비밀번호를 얻으려면 API 키 탭으로 이동하세요.

API 키와 API 비밀은 각각 사용자 키와 사용자 비밀입니다.

利用最新的 Twitter API 设计 Twitter 小部件

API Keys strong> 탭에서 애플리케이션 액세스 토큰과 액세스 토큰 비밀번호를 얻으려면 아래로 스크롤하여 "내 액세스 토큰 만들기" 버튼을 클릭하여 액세스 토큰을 만듭니다.

利用最新的 Twitter API 设计 Twitter 小部件

페이지를 새로 고치면 애플리케이션 액세스 토큰이 표시됩니다.

利用最新的 Twitter API 设计 Twitter 小部件

우리 이제 소비자 키와 비밀 키, 액세스 토큰과 비밀 키가 있습니다. 이러한 OAuth 자격 증명은 API에 요청할 때 Twitter에서 인증됩니다.

우리가 코딩하고 있는 트위터 타임라인 위젯의 위젯 설정에는 이러한 OAuth 자격 증명을 수집하고 위젯에서 재사용할 수 있도록 데이터베이스에 저장하는 양식 필드가 포함됩니다.

트위터 타임라인 위젯 플러그인 코딩을 시작해 보겠습니다.

트위터 타임라인 위젯 개발

제목은 플러그인 파일에 가장 먼저 들어가는 것은 플러그인 헤더입니다.

<?php
/*
  Plugin Name: Twitter Tweets Widget
  Plugin URI: http://code.tutsplus.com
  Description: Displays latest tweets from Twitter.
  Author: Agbonghama Collins
  Author URI: http://tech4sky.com
 */

상위 클래스를 확장하는 WP_Widget 클래스를 만듭니다.

으아악

__construct() 매직 메소드를 통해 위젯에 이름과 설명을 할당하세요.

으아악

아래 form() 메소드는 나중에 위젯에서 재사용할 수 있도록 OAuth 자격 증명을 데이터베이스에 저장하는 위젯 설정 양식을 생성합니다.

으아악

아래는 위의 form() 메소드로 생성된 위젯 설정 스크린샷입니다.

利用最新的 Twitter API 设计 Twitter 小部件

설정 양식 필드에 값을 입력하면 데이터베이스에 저장해야 합니다. update() 메소드는 악성 데이터를 제거하여 위젯 양식 값을 정리한 후 정리된 데이터를 데이터베이스에 저장합니다.

으아악

우리 위젯이 사용할 API로부터 요청을 쉽게 보내고 응답을 받을 수 있게 해주는 매우 유용한 Twitter API용 간단한 PHP 래퍼를 찾았습니다.

GitHub 저장소에서 zip 아카이브의 PHP 래퍼를 다운로드하고 래퍼 클래스가 포함된 TwitterAPIExchange.php 파일을 추출하여 포함합니다.

下面的 twitter_timeline() 方法接受以下参数作为其参数,这在向 Twitter API 发出请求时会派上用场。

  1. $username: Twitter 用户名

  2. $limit: 小部件要显示的推文数量

  3. $oauth_access_token: Twitter 应用程序 OAuth 访问令牌。

  4. $oauth_access_token_secret: 应用程序 OAuth 访问令牌 秘密。

  5. $consumer_key: Twitter 应用程序消费者密钥。

  6. $consumer_secret: 应用程序消费者秘密。

public function twitter_timeline( $username, $limit, $oauth_access_token, $oauth_access_token_secret, $consumer_key, $consumer_secret ) {
    require_once 'TwitterAPIExchange.php';

    /** Set access tokens here - see: https://dev.twitter.com/apps/ */
    $settings = array(
        'oauth_access_token'        => $oauth_access_token,
        'oauth_access_token_secret' => $oauth_access_token_secret,
        'consumer_key'              => $consumer_key,
        'consumer_secret'           => $consumer_secret
    );

    $url = 'https://api.twitter.com/1.1/statuses/user_timeline.json';
    $getfield = '?screen_name=' . $username . '&count=' . $limit;
    $request_method = 'GET';
    
    $twitter_instance = new TwitterAPIExchange( $settings );
    
    $query = $twitter_instance
        ->setGetfield( $getfield )
        ->buildOauth( $url, $request_method )
        ->performRequest();
    
    $timeline = json_decode($query);

    return $timeline;
}

该方法使用 PHP Wrapper for Twitter API 向 Twitter API 发送请求,保存并返回响应(用户时间线的 JSON 数据)。

创建或制作推文的时间由 API 以英文文本日期时间保存。例如。 星期四 6 月 26 日 08:47:24 +0000 2014

为了使推文时间更加用户友好,我创建了方法 tweet_time(),它通过以下方式显示时间。

  • 如果时间少于三秒,则返回现在。
  • 不到一分钟,返回x秒前。
  • 不到两分钟,返回大约 1 分钟前。
  • 不到一小时,n 分钟前返回,依此类推。

这是 tweet_time() 方法的代码。

public function tweet_time( $time ) {
    // Get current timestamp.
    $now = strtotime( 'now' );

    // Get timestamp when tweet created.
    $created = strtotime( $time );

    // Get difference.
    $difference = $now - $created;

    // Calculate different time values.
    $minute = 60;
    $hour = $minute * 60;
    $day = $hour * 24;
    $week = $day * 7;

    if ( is_numeric( $difference ) && $difference > 0 ) {

        // If less than 3 seconds.
        if ( $difference < 3 ) {
            return __( 'right now', 'twitter_tweets_widget' );
        }

        // If less than minute.
        if ( $difference < $minute ) {
            return floor( $difference ) . ' ' . __( 'seconds ago', 'twitter_tweets_widget' );;
        }

        // If less than 2 minutes.
        if ( $difference < $minute * 2 ) {
            return __( 'about 1 minute ago', 'twitter_tweets_widget' );
        }

        // If less than hour.
        if ( $difference < $hour ) {
            return floor( $difference / $minute ) . ' ' . __( 'minutes ago', 'twitter_tweets_widget' );
        }

        // If less than 2 hours.
        if ( $difference < $hour * 2 ) {
            return __( 'about 1 hour ago', 'twitter_tweets_widget' );
        }

        // If less than day.
        if ( $difference < $day ) {
            return floor( $difference / $hour ) . ' ' . __( 'hours ago', 'twitter_tweets_widget' );
        }

        // If more than day, but less than 2 days.
        if ( $difference > $day && $difference < $day * 2 ) {
            return __( 'yesterday', 'twitter_tweets_widget' );;
        }

        // If less than year.
        if ( $difference < $day * 365 ) {
            return floor( $difference / $day ) . ' ' . __( 'days ago', 'twitter_tweets_widget' );
        }

        // Else return more than a year.
        return __( 'over a year ago', 'twitter_tweets_widget' );
    }
}

接下来是 widget() 方法,用于在 WordPress 前端显示 Twitter 时间线。

public function widget( $args, $instance ) {
    $title                     = apply_filters( 'widget_title', $instance['title'] );
    $username                  = $instance['twitter_username'];
    $limit                     = $instance['update_count'];
    $oauth_access_token        = $instance['oauth_access_token'];
    $oauth_access_token_secret = $instance['oauth_access_token_secret'];
    $consumer_key              = $instance['consumer_key'];
    $consumer_secret           = $instance['consumer_secret'];

    echo $args['before_widget'];

    if ( ! empty( $title ) ) {
        echo $args['before_title'] . $title . $args['after_title'];
    }

    // Get the tweets.
    $timelines = $this->twitter_timeline( $username, $limit, $oauth_access_token, $oauth_access_token_secret, $consumer_key, $consumer_secret );

    if ( $timelines ) {

        // Add links to URL and username mention in tweets.
        $patterns = array( '@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@', '/@([A-Za-z0-9_]{1,15})/' );
        $replace = array( '<a href="$1">$1</a>', '<a href="http://twitter.com/$1">@$1</a>' );

        foreach ( $timelines as $timeline ) {
            $result = preg_replace( $patterns, $replace, $timeline->text );

            echo '<div>';
                echo $result . '<br/>';
                echo $this->tweet_time( $timeline->created_at );
            echo '</div>';
            echo '<br/>';
        }

    } else {
        _e( 'Error fetching feeds. Please verify the Twitter settings in the widget.', 'twitter_tweets_widget' );
    }

    echo $args['after_widget'];
}

小部件类 Twitter_Tweets_Widget 最终使用 widgets_init 挂钩注册,因此 WordPress 可以识别它。使用结束语 } 结束您的课程,然后添加以下代码来初始化

function register_twitter_widget() {
    register_widget( 'Twitter_Tweets_Widget' );
}

add_action( 'widgets_init', 'register_twitter_widget' );

最后,我们完成了 Twitter 时间轴小部件的编码。

摘要

在本文中,我们学习了如何在实际项目中使用 Twitter API 来构建我们自己的 Twitter 时间线 WordPress 小部件。尽管本教程应该相对简单,但我们涵盖了 OAuth、密钥等主题,以及其他对于使用 API 的人员来说可能比较陌生的主题。

如果您有任何问题或代码改进建议,请在评论中告诉我。

위 내용은 최신 Twitter API를 사용하여 Twitter 위젯 디자인의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.