コード例 #1
0
ファイル: test_scrapers.py プロジェクト: zafrad/profilegrab
 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')
コード例 #2
0
ファイル: test_scrapers.py プロジェクト: zafrad/profilegrab
 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)
コード例 #3
0
ファイル: test_scrapers.py プロジェクト: zafrad/profilegrab
 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')
コード例 #4
0
ファイル: grab.py プロジェクト: zafrad/profilegrab
    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