Validate Twitter usernames

Closes #55
This commit is contained in:
JustAnotherArchivist
2020-08-24 19:03:52 +00:00
parent 1480260e47
commit bb83d1d72f

View File

@@ -7,6 +7,7 @@ import random
import logging import logging
import re import re
import snscrape.base import snscrape.base
import string
import time import time
import typing import typing
import urllib.parse import urllib.parse
@@ -254,6 +255,8 @@ class TwitterUserScraper(TwitterSearchScraper):
name = 'twitter-user' name = 'twitter-user'
def __init__(self, username, **kwargs): def __init__(self, username, **kwargs):
if not self.is_valid_username(username):
raise ValueError('Invalid username')
super().__init__(f'from:{username}', **kwargs) super().__init__(f'from:{username}', **kwargs)
self._username = username self._username = username
@@ -306,9 +309,18 @@ class TwitterUserScraper(TwitterSearchScraper):
profileBannerUrl = user['legacy'].get('profile_banner_url'), profileBannerUrl = user['legacy'].get('profile_banner_url'),
) )
@staticmethod
def is_valid_username(s):
return 1 <= len(s) <= 15 and s.strip(string.ascii_letters + string.digits + '_') == ''
@classmethod @classmethod
def setup_parser(cls, subparser): def setup_parser(cls, subparser):
subparser.add_argument('username', help = 'A Twitter username (without @)') def username(s):
if cls.is_valid_username(s):
return s
raise ValueError('Invalid username')
subparser.add_argument('username', type = username, help = 'A Twitter username (without @)')
@classmethod @classmethod
def from_args(cls, args): def from_args(cls, args):