Dart에서 http 라이브러리만 사용하여 Twitter APIv2 사용
※ 개발자 사이트에서 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 또는 직접 지정하면 사용할 수 있어 매우 간단합니다.☺️
참고 자료
미래!Twitter 새 API
API 키와 API 키를 비밀리에 획득하기는 좀 어렵다.
유료 서적이지만 이 절차가 기재되어 있어서 추천합니다.
Reference
이 문제에 관하여(Dart에서 http 라이브러리만 사용하여 Twitter APIv2 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/luecy1/articles/4e6b59aebd9da15dc51f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)