Dart에서 http 라이브러리만 사용하여 Twitter APIv2 사용

13313 단어 TwitterDarttech
필요한 물건
  • API 키
  • API 비밀 키
  • 단계
  • API 키 및 API 비밀 키 기본 64화
  • OAuth 2.0 Bearer Token
  • 획득
  • 획득한 Bearer Token에 대한 정보를 수여하고 API 방문
  • ※ 현지에는 이용자와 연관된 API v2가 없습니다.
    ※ 개발자 사이트에서 OAuth 2.0 Bearer Token을 직접 획득할 수도 있습니다.

    API 키 및 API 비밀 키 기본화


      final base64encoded =  base64.encode(latin1.encode('${API_KEY}:${API_KEY_SECRET}'));
    
    Token 획득에 필요한 API는 Basic 인증을 통과했기 때문에 API 키와 API 기밀 키를 조합하고 기본적으로 64화한다.
    base 64화 코드는 http_auth 라이브러리를 참조했습니다.

    OAuth 2.0 Bearer Token 획득


    상대방에게 요구하다.
    던지는 내용은 팟캐스트 헤드에'Authorization'을 지정하고 팟캐스트에'grant type'을 지정하는 것이다.
      final response = await http.post(
        'https://api.twitter.com/oauth2/token',
        headers: {'Authorization': 'Basic $base64encoded'},
        body: {'grant_type': 'client_credentials'},
      );
    
    아래와 같이 답장을 보냈는데 AAAA% 2 FAAA% 3 DAAAAAAA는 Bearer Token이다.
    {"token_type":"bearer","access_token":"AAAA%2FAAA%3DAAAAAAAA"}

    API 액세스에 가져온 Bearer Token 정보 추가


    여기
    /2/users/by/username/:username
    방문하다.
    던지는 내용은 ':usename' 에 인자를 삽입한 Luecy1 (내 트위터 계정) 요청 페이지의 끝에 'Authorization' 을 지정합니다.
      final result = await http.get(
        'https://api.twitter.com/2/users/by/username/Luecy1',
        headers: {'Authorization': 'Bearer ${oauthToken.accessToken}'},
      );
    
    베어와 토큰 사이에는 공간이 하나밖에 없어!(한 번 기다렸다)
    이렇게 하면 아래의 응답을 되돌릴 수 있다.
    기존 API에 비해 반응량이 부족하지만, 트위터 APIv2에서는 원하는 정보를 지정하는 지침이 마련된 것으로 보인다.
    {"data":{"id":"285498667","name":"youhei@( ˘ω˘)아이고...☃️","username":"Luecy1"}}

    완성판 코드


    앞서 설명한 코드와는 조금 다릅니다.
    import 'dart:convert';
    
    import 'package:http/http.dart' as http;
    
    void main() async {
      final base64encoded =
          base64.encode(latin1.encode('${API_KEY}:${API_KEY_SECRET}'));
    
      final response = await http.post(
        'https://api.twitter.com/oauth2/token',
        headers: {'Authorization': 'Basic $base64encoded'},
        body: {'grant_type': 'client_credentials'},
      );
    
      print(response.body);
    
      final oauthToken = OauthToken.fromJson(jsonDecode(response.body));
    
      // Map<String,List<String>>
      final queryParameters = {
        'expansions': ['pinned_tweet_id'],
        'user.fields': [
          'name',
          'created_at',
          'description',
        ],
      };
    
      // join request queryParameters
      final params = queryParameters.entries.map((paramEntry) {
        final value = paramEntry.value.join(',');
        return '${paramEntry.key}=$value';
      }).reduce((param1, param2) {
        return '${param1}&${param2}';
      });
    
      final result = await http.get(
        'https://api.twitter.com/2/users/by/username/Luecy1?$params',
        headers: {'Authorization': 'Bearer ${oauthToken.accessToken}'},
      );
    
      print(result.body);
    }
    
    class OauthToken {
      final String tokenType;
      final String accessToken;
    
      OauthToken(this.tokenType, this.accessToken);
    
      OauthToken.fromJson(Map<String, dynamic> json)
          : tokenType = json['token_type'],
            accessToken = json['access_token'];
    }
    

    총결산


    기존 Outh10a일 때 oauth 라이브러리를 사용하지 않으면 hmac-sha1이라는 알고리즘으로 서명해야 하기 때문에 난이도가 상당히 높다.
    이번 v2는 머리와 몸에서 베이스 64 또는 직접 지정하면 사용할 수 있어 매우 간단합니다.☺️

    참고 자료


    https://techbookfest.org/product/5734388805402624?productVariantID=5699465224650752
    미래!Twitter 새 API
    API 키와 API 키를 비밀리에 획득하기는 좀 어렵다.
    유료 서적이지만 이 절차가 기재되어 있어서 추천합니다.

    좋은 웹페이지 즐겨찾기