From 624036d00cda371d010a2d74733b427c4c5391bf Mon Sep 17 00:00:00 2001 From: Serhii Date: Thu, 9 Feb 2023 12:23:13 +0200 Subject: [PATCH] add address lookup for pinned tweet --- lib/entities/parse_address_from_domain.dart | 11 ++++++++--- lib/twitter/twitter_api.dart | 14 ++++++++++++-- lib/twitter/twitter_user.dart | 7 +++++-- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/lib/entities/parse_address_from_domain.dart b/lib/entities/parse_address_from_domain.dart index 6574d26fd..20ccb46c6 100644 --- a/lib/entities/parse_address_from_domain.dart +++ b/lib/entities/parse_address_from_domain.dart @@ -44,10 +44,15 @@ class AddressResolver { if (text.startsWith('@') && !text.substring(1).contains('@')) { final formattedName = text.substring(1); final twitterUser = await TwitterApi.lookupUserByName(userName: formattedName); - final address = extractAddressByType( + final addressFromBio = extractAddressByType( raw: twitterUser.description ?? '', type: CryptoCurrency.fromString(ticker)); - if (address != null) { - return ParsedAddress.fetchTwitterAddress(address: address, name: text); + final addressFromPinnedTweet = extractAddressByType( + raw: twitterUser.pinnedTweet ?? '', type: CryptoCurrency.fromString(ticker)); + if (addressFromBio != null) { + return ParsedAddress.fetchTwitterAddress(address: addressFromBio, name: text); + } + if (addressFromPinnedTweet != null) { + return ParsedAddress.fetchTwitterAddress(address: addressFromPinnedTweet, name: text); } } if (!text.startsWith('@') && text.contains('@') && !text.contains('.')) { diff --git a/lib/twitter/twitter_api.dart b/lib/twitter/twitter_api.dart index 27fb7d1a2..202e3d217 100644 --- a/lib/twitter/twitter_api.dart +++ b/lib/twitter/twitter_api.dart @@ -10,7 +10,7 @@ class TwitterApi { static const userPath = '/2/users/by/username/'; static Future lookupUserByName({required String userName}) async { - final queryParams = {'user.fields': 'description'}; + final queryParams = {'user.fields': 'description', 'expansions': 'pinned_tweet_id'}; final headers = {'authorization': 'Bearer $twitterBearerToken'}; @@ -32,6 +32,16 @@ class TwitterApi { throw Exception(responseJSON['errors'][0]['detail']); } - return TwitterUser.fromJson(responseJSON['data'] as Map); + final user = responseJSON['data'] as Map; + + try { + if (responseJSON['includes'] != null) { + user['pinnedTweet'] = responseJSON['includes']['tweets'][0]['text']; + } + } catch (e) { + print('responseJSON[includes][tweets][0][text] $e'); + } + + return TwitterUser.fromJson(user); } } diff --git a/lib/twitter/twitter_user.dart b/lib/twitter/twitter_user.dart index c4bda7859..bf5d7282a 100644 --- a/lib/twitter/twitter_user.dart +++ b/lib/twitter/twitter_user.dart @@ -1,16 +1,19 @@ class TwitterUser { - TwitterUser({required this.id, required this.username, required this.name, this.description}); + TwitterUser({required this.id, required this.username, required this.name, this.description, + this.pinnedTweet}); final String id; final String username; final String name; final String? description; + final String? pinnedTweet; factory TwitterUser.fromJson(Map json) { return TwitterUser( id: json['id'] as String, username: json['username'] as String, name: json['name'] as String, - description: json['description'] as String?); + description: json['description'] as String?, + pinnedTweet: json['pinnedTweet'] as String?); } }