From adc85e2e5171a9a539d7916d45a102d7db2058fa Mon Sep 17 00:00:00 2001 From: Dylan Date: Sun, 5 Mar 2023 21:23:27 +0000 Subject: [PATCH] Added function & tests for getting user profile (#65) --- test_vx.py | 7 +++++++ twExtract/__init__.py | 17 ++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/test_vx.py b/test_vx.py index 1a51140..61e09bd 100644 --- a/test_vx.py +++ b/test_vx.py @@ -7,6 +7,7 @@ import msgs from flask.testing import FlaskClient client = FlaskClient(twitfix.app) +testUser="https://twitter.com/jack" testTextTweet="https://twitter.com/jack/status/20" testVideoTweet="https://twitter.com/Twitter/status/1263145271946551300" testMediaTweet="https://twitter.com/Twitter/status/1118295916874739714" @@ -40,6 +41,12 @@ def test_textTweetExtract(): assert 'extended_entities' not in tweet assert tweet["is_quote_status"]==False +def test_textUserExtract(): + user = twExtract.extractUser(testUser) + assert user["screen_name"]=="jack" + assert user["id"]==12 + assert user["created_at"] == "Tue Mar 21 20:50:14 +0000 2006" + def test_videoTweetExtract(): tweet = twExtract.extractStatus(testVideoTweet) assert tweet["full_text"]==videoVNF_compare['description'] diff --git a/twExtract/__init__.py b/twExtract/__init__.py index bb3f940..a5d548e 100644 --- a/twExtract/__init__.py +++ b/twExtract/__init__.py @@ -7,7 +7,7 @@ from . import twExtractError guestToken=None pathregex = r"\w{1,15}\/(status|statuses)\/(\d{2,20})" - +userregex = r"^https?:\/\/(?:www\.)?twitter\.com\/(?:#!\/)?@?([^/?#]*)(?:[?#].*)?$" def getGuestToken(): global guestToken if guestToken is None: @@ -50,6 +50,21 @@ def extractStatus(url): except Exception as e: return extractStatus_fallback(url) +def extractUser(url): + m = re.search(userregex, url) + if m is None: + raise twExtractError.TwExtractError(400, "Invalid URL") + screen_name = m.group(1) + # get guest token + guestToken = getGuestToken() + # get user + user = requests.get(f"https://api.twitter.com/1.1/users/show.json?screen_name={screen_name}",headers={"Authorization":"Bearer AAAAAAAAAAAAAAAAAAAAAPYXBAAAAAAACLXUNDekMxqa8h%2F40K4moUkGsoc%3DTYfbDKbT3jJPCEVnMYqilB28NHfOPqkca3qaAxGfsyKCs0wRbw", "x-guest-token":guestToken}) + output = user.json() + if "errors" in output: + # pick the first error and create a twExtractError + error = output["errors"][0] + raise twExtractError.TwExtractError(error["code"], error["message"]) + return output def lambda_handler(event, context): if ("queryStringParameters" not in event):