def test_screen_name_with_at(self): twitter_text = get_twitter_text('@c_hack', self.twitter) self.assertIsNotNone(twitter_text) self.assertGreater(len(twitter_text), 140) twitter.Api.GetUser.assert_called_with(screen_name=u'@c_hack')
def test_numeric_id(self): twitter_text = get_twitter_text(1234, self.twitter) self.assertIsNotNone(twitter_text) self.assertGreater(len(twitter_text), 140) twitter.Api.GetUser.assert_called_with(user_id=1234)
def test_string_id(self): twitter_text = get_twitter_text('1234', self.twitter) self.assertIsNotNone(twitter_text) self.assertGreater(len(twitter_text), 140) twitter.Api.GetUser.assert_called_with(user_id=u'1234')
def grab(self, *args, **kwargs): """ The main method for ProfileGrab. Disambiguates the uids and calls the appropriate scraper method. Specify twitter screen names with a leading '@' character. Numeric IDs should be specified as keyword arguments. - returns: dict, in the format {"twitter:@c_hack":u"Check out this link I found! [...]"} """ text = {} assert set(kwargs.keys()).issubset( settings.allowed_ids ), "Unrecognized keyword argument. Please supply one of: %s" % str( settings.allowed_ids) for arg in args: if isinstance(arg, str): arg = unicode(arg) if isinstance(arg, unicode): if arg.startswith('@'): text['twitter:' + arg] = get_twitter_text( arg, self.twitter) else: text['facebook:' + arg] = get_facebook_text( arg, self.facebook) elif isinstance(arg, int): raise TypeError( "When specifying a numeric id, please use a keyword argument, e.g. facebook_id=1287364581" ) elif isinstance(arg, list): assert all([ isinstance(x, str) or isinstance(x, unicode) for x in arg ]), "Unrecognized input. Please supply a uri or list of uris." for uri in list: text.update(self.grab(uri)) elif arg is None: continue else: raise TypeError("Unrecognized input type: %s" % type(arg)) for site, arg in kwargs.items(): site = site.strip( "_id" ) # output is always 'facebook':'something' or 'twitter':'something' if isinstance(arg, str): arg = unicode(arg) if isinstance(arg, unicode): text[site + ":" + arg] = scrape_from_id(site, arg, fb=self.facebook, tw=self.twitter) elif isinstance(arg, int): text[site + ":" + str(arg)] = scrape_from_id(site, arg, fb=self.facebook, tw=self.twitter) elif isinstance(arg, list): for uid in arg: text.update(self.grab(**{site: uid})) elif arg is None: continue else: raise TypeError("Unrecognized input type: %s" % type(arg)) text = dict((k, '') if v is None else (k, v) for k, v in text.iteritems()) # replace None values with empty string return text