コード例 #1
0
 def show(self, event, package, distro):
     if distro is None or distro.lower() == 'all':
         distro = 'all'
     else:
         if self._release_cache is None:
             self._release_cache = json_webservice(
                 u'http://dde.debian.net/dde/q/udd/packages', {
                     'list': '',
                     't': 'json',
                 })['r']
         releases = self._release_cache
         if distro not in releases:
             candidates = [x for x in releases if distro in x]
             if len(candidates) == 1:
                 distro = candidates[0]
             else:
                 event.addresponse(u"Sorry, I don't know about %(distro)s. "
                                   u"How about one of: %(releases)s?", {
                     'distro': distro,
                     'releases': human_join(
                         x.startswith('prio-') and x[5:] or x
                         for x in releases
                     ),})
                 return
     result = json_webservice(
         u'http://dde.debian.net/dde/q/udd/packages/%s/%s' %
         (distro, package), {'t': 'json'})
     result = result['r']
     if not result:
         event.addresponse(u"Sorry, I couldn't find anything of that name. "
                           u"Is it a binary package?")
         return
     event.addresponse(u'%(package)s %(version)s: %(description)s', result)
コード例 #2
0
ファイル: geography.py プロジェクト: vhata/ibid
    def _geonames_lookup(self, place):
        search = json_webservice('http://ws.geonames.org/searchJSON', {'q': place, 'maxRows': 1, 'username': '******'})
        if search['totalResultsCount'] == 0:
            return None

        city = search['geonames'][0]
        timezone = json_webservice('http://ws.geonames.org/timezoneJSON', {'lat': city['lat'], 'lng': city['lng'], 'username': '******'})

        if 'timezoneId' in timezone:
            return gettz(timezone['timezoneId'])

        if 'rawOffset' in timezone:
            offset = timezone['rawOffset']
            return tzoffset('UTC%s%s' % (offset>=0 and '+' or '', offset), offset*3600)
コード例 #3
0
    def twitchRandom(self, event):
        summary = json_webservice('https://api.twitch.tv/kraken/streams/summary')
        maxchannel = summary['channels']
        randomnum = randint(1, maxchannel)

        query = json_webservice('https://api.twitch.tv/kraken/streams?limit=1&offset=%d' % randomnum)

        stream = query['streams'].pop()

        message = u'Random Stream found. Number:  %s/%s' % \
                  (randomnum, maxchannel)
        event.addresponse(message, address=False, processed=True)

        self.broadcasterInfo(event, stream['channel']['name'])
コード例 #4
0
ファイル: geography.py プロジェクト: B-Rich/ibid-1
    def _geonames_lookup(self, place):
        search = json_webservice('http://ws.geonames.org/searchJSON', {'q': place, 'maxRows': 1, 'username': '******'})
        if search['totalResultsCount'] == 0:
            return None

        city = search['geonames'][0]
        timezone = json_webservice('http://ws.geonames.org/timezoneJSON', {'lat': city['lat'], 'lng': city['lng'], 'username': '******'})

        if 'timezoneId' in timezone:
            return gettz(timezone['timezoneId'])

        if 'rawOffset' in timezone:
            offset = timezone['rawOffset']
            return tzoffset('UTC%s%s' % (offset>=0 and '+' or '', offset), offset*3600)
コード例 #5
0
ファイル: languages.py プロジェクト: B-Rich/ibid-1
    def _translate (self, event, phrase, src_lang, dest_lang):
        params = {
            'v': '1.0',
            'q': phrase,
            'langpair': src_lang + '|' + dest_lang,
        }
        if self.api_key:
            params['key'] = self.api_key

        headers = {'referer': self.referer}

        response = json_webservice(
            'http://ajax.googleapis.com/ajax/services/language/translate',
            params, headers)

        if response['responseStatus'] == 200:
            translated = unicode(decode_htmlentities(
                response['responseData']['translatedText']))
            return (translated, src_lang or
                    response['responseData']['detectedSourceLanguage'])
        else:
            errors = {
                'invalid translation language pair':
                    u"I don't know that language",
                'invalid text':
                    u"there's not much to go on",
                 'could not reliably detect source language':
                    u"I'm not sure what language that was",
            }

            msg = errors.get(response['responseDetails'],
                            response['responseDetails'])

            raise TranslationException(msg)
コード例 #6
0
ファイル: languages.py プロジェクト: shoosen/ibid
    def _translate (self, event, phrase, src_lang, dest_lang):
        params = {
            'v': '1.0',
            'q': phrase,
            'langpair': src_lang + '|' + dest_lang,
        }
        if self.api_key:
            params['key'] = self.api_key

        headers = {'referer': self.referer}

        response = json_webservice(
            'http://ajax.googleapis.com/ajax/services/language/translate',
            params, headers)

        if response['responseStatus'] == 200:
            translated = unicode(decode_htmlentities(
                response['responseData']['translatedText']))
            return (translated, src_lang or
                    response['responseData']['detectedSourceLanguage'])
        else:
            errors = {
                'invalid translation language pair':
                    u"I don't know that language",
                'invalid text':
                    u"there's not much to go on",
                 'could not reliably detect source language':
                    u"I'm not sure what language that was",
            }

            msg = errors.get(response['responseDetails'],
                            response['responseDetails'])

            raise TranslationException(msg)
コード例 #7
0
    def search(self, event, term, distro, arch):
        distro = distro and distro.lower() or self.distro
        arch = arch and arch.lower() or self.arch
        distro = distro + u'-' + arch
        if distro == u'all-all':
            distro = u'all'

        result = json_webservice(
            u'http://dde.debian.net/dde/q/aptfile/byfile/%s/%s' %
            (distro, quote(term)), {'t': 'json'})
        result = result['r']
        if result:
            if isinstance(result[0], list):
                bypkg = map(lambda x: (x[-1], u'/'.join(x[:-1])), result)
                numpackages = len(bypkg)
                packages = defaultdict(list)
                for p, arch in bypkg:
                    packages[p].append(arch)
                packages = map(lambda i: u'%s [%s]' % (i[0], u', '.join(i[1])),
                               packages.iteritems())
            else:
                numpackages = len(result)
                packages = result
            event.addresponse(u'Found %(num)i packages: %(names)s', {
                'num': numpackages,
                'names': human_join(packages),
            })
        else:
            event.addresponse(u'No packages found')
コード例 #8
0
    def remote_update(self, service, id):
        status = json_webservice('%sstatuses/show/%s.json' %
                                 (service['endpoint'], id))

        return {
            'screen_name': status['user']['screen_name'],
            'text': decode_htmlentities(status['text'])
        }
コード例 #9
0
ファイル: google.py プロジェクト: GertBurger/ibid
    def _google_api_search(self, query, resultsize="large", country=None):
        params = {"v": "1.0", "q": query, "rsz": resultsize}
        if country is not None:
            params["gl"] = country
        if self.api_key:
            params["key"] = self.api_key

        headers = {"referer": self.referer}
        return json_webservice("http://ajax.googleapis.com/ajax/services/search/web", params, headers)
コード例 #10
0
ファイル: ddg.py プロジェクト: ibid/ibid
    def _ddg_api_search(self, query, resultsize="large", country=None):
        params = {
            'q': query,
            't': 'ibid',
            'format': 'json',
        }
        if country is not None:
            params['gl'] = country

        return json_webservice('https://api.duckduckgo.com', params)
コード例 #11
0
    def _ddg_api_search(self, query, resultsize="large", country=None):
        params = {
            'q': query,
            't': 'ibid',
            'format': 'json',
        }
        if country is not None:
            params['gl'] = country

        return json_webservice('https://api.duckduckgo.com', params)
コード例 #12
0
 def lookup(self, event, bug_number):
     bug_number = int(bug_number)
     try:
         result = json_webservice(
             u'http://dde.debian.net/dde/q/bts/bynumber/%i' % bug_number,
             {'t': 'json'})
     except HTTPError, e:
         if e.code == 400:
             event.addresponse(
                     u"Sorry, but I can't find a bug of that number.")
             return
         else:
             raise
コード例 #13
0
    def _google_api_search(self, query, resultsize="large", country=None):
        params = {
            'v': '1.0',
            'q': query,
            'rsz': resultsize,
        }
        if country is not None:
            params['gl'] = country
        if self.api_key:
            params['key'] = self.api_key

        headers = {'referer': self.referer}
        return json_webservice('http://ajax.googleapis.com/ajax/services/search/web', params, headers)
コード例 #14
0
 def updateTwitch(self):
     try:
         new_data = json_webservice('https://api.twitch.tv/kraken/streams?channel=' + self.name)
         if new_data['streams']:
             broadcaster_data = new_data['streams'].pop()
             channel = broadcaster_data['channel']
             self.live = True
             self.game = broadcaster_data['game']
             self.title = channel['status']
             self.viewers = broadcaster_data['viewers']
             self.liveurl = channel['url']
     except Exception, e:
         return False
コード例 #15
0
 def updateHitbox(self):
     try:
         new_data = json_webservice('http://api.hitbox.tv/media/live/' + self.name)
         if new_data['livestream']:
             media = new_data['livestream'].pop()
             if media['media_is_live'] == u'1':
                 self.live = True
                 self.game = media['category_name']
                 self.title = media['media_status']
                 self.viewers = media['media_views']
                 self.liveurl = media['channel']['channel_link']
     except Exception, e:
         return False
コード例 #16
0
 def updateHitbox(self):
     try:
         new_data = json_webservice('http://api.hitbox.tv/media/live/' + ','.join(self.broadcasters.keys()))
         for media in new_data['livestream']:
             if media['media_is_live'] == u'1':
                 login = media['media_name']
                 broadcaster = self.getBroadcasterByName(login)
                 broadcaster.live = True
                 broadcaster.game = media['category_name']
                 broadcaster.title = media['media_status']
                 broadcaster.viewers = media['media_views']
                 broadcaster.liveurl = media['channel']['channel_link']
     except Exception, e:
         return False
コード例 #17
0
 def updateTwitch(self):
     try:
         new_data = json_webservice('https://api.twitch.tv/kraken/streams?channel=' + ','.join(self.broadcasters.keys()))
         for broadcaster_data in new_data['streams']:
             channel = broadcaster_data['channel']
             login = channel['name']
             broadcaster = self.getBroadcasterByName(login)
             broadcaster.live = True
             broadcaster.game = broadcaster_data['game']
             broadcaster.title = channel['status']
             broadcaster.viewers = broadcaster_data['viewers']
             broadcaster.liveurl = channel['url']
     except Exception, e:
         return False
コード例 #18
0
    def search(self, event, package, search):
        package = package.lower()
        if search is not None:
            search = search.lower()
        result = json_webservice(
            u'http://dde.debian.net/dde/q/bts/bypackage/%s' % package,
            {'t': 'json'})
        bugs = result['r']
        if not bugs:
            event.addresponse(u"Sorry, I couldn't find any open bugs on %s",
                              package)
            return

        severities = {
            'critical': 4,
            'grave': 3,
            'serious': 2,
            'important': 1,
            'normal': 0,
            'minor': -1,
            'wishlist': -2,
        }

        buglist = []
        for b in bugs.itervalues():
            if search and search not in b['subject'].lower():
                continue

            tags = b['tags']
            if b['pending'] != 'pending':
                tags.append(b['pending'])
            if tags:
                tags = ', ' + ', '.join(b['tags'])
            else:
                tags = ''

            body = '%s [%s%s]' % (b['subject'], b['severity'], tags)
            sev = 0 - severities.get(b['severity'], 0)
            buglist.append((b['bug_num'], sev, body))
        buglist.sort()
        if not buglist:
            event.addresponse(u"Sorry, I couldn't find any open bugs matching "
                              u"your query")
            return
        event.addresponse(
            u'Found %(count)i matching %(plural)s: %(bugs)s', {
                'count': len(buglist),
                'plural': plural(len(buglist), u'bug', u'bugs'),
                'bugs': ', '.join('%i: %s' % (b[0], b[2]) for b in buglist)
            })
コード例 #19
0
ファイル: sysadmin.py プロジェクト: B-Rich/ibid
    def search(self, event, package, search):
        package = package.lower()
        if search is not None:
            search = search.lower()
        result = json_webservice(
            u'http://dde.debian.net/dde/q/bts/bypackage/%s' % package,
            {'t': 'json'})
        bugs = result['r']
        if not bugs:
            event.addresponse(u"Sorry, I couldn't find any open bugs on %s",
                    package)
            return

        severities = {
            'critical': 4,
            'grave': 3,
            'serious': 2,
            'important': 1,
            'normal': 0,
            'minor': -1,
            'wishlist': -2,
        }

        buglist = []
        for b in bugs.itervalues():
            if search and search not in b['subject'].lower():
                continue

            tags = b['tags']
            if b['pending'] != 'pending':
                tags.append(b['pending'])
            if tags:
                tags = ', ' + ', '.join(b['tags'])
            else:
                tags = ''

            body = '%s [%s%s]' % (b['subject'], b['severity'], tags)
            sev = 0 - severities.get(b['severity'], 0)
            buglist.append((b['bug_num'], sev, body))
        buglist.sort()
        if not buglist:
            event.addresponse(u"Sorry, I couldn't find any open bugs matching "
                              u"your query")
            return
        event.addresponse(u'Found %(count)i matching %(plural)s: %(bugs)s', {
            'count': len(buglist),
            'plural': plural(len(buglist), u'bug', u'bugs'),
            'bugs': ', '.join('%i: %s' % (b[0], b[2]) for b in buglist)
        })
コード例 #20
0
 def search(self, event, term):
     terms = re.split(r'(?u)[\s/?]', term)
     result = json_webservice(
         u'http://debtags.debian.net/dde/q/axi/cquery/%s' %
         u'/'.join(terms), {'t': 'json'})
     result = result['r']
     if not result['pkgs']:
         event.addresponse(u"Sorry, I couldn't find anything relevant. "
                           u"Try being less specific?")
         return
     event.addresponse(u"Packages: %(packages)s. "
                       u"Not there? Try these terms: %(suggested)s", {
         'packages': human_join(pkg[1] for pkg in result['pkgs']),
         'suggested': human_join(result['sugg']),
     })
コード例 #21
0
    def remote_latest(self, service, user):
        if service['api'] == 'twitter':
            # Twitter ommits retweets in the JSON and XML results:
            statuses = generic_webservice(
                '%sstatuses/user_timeline.rss' % service['endpoint'], {
                    'screen_name': user,
                    'count': 1
                })
            tree = ElementTree.fromstring(statuses)
            latest = tree.find('.//item')
            if latest is None:
                if tree.find('.//error'):
                    log.info('Twitter user_latest returned: %s',
                             tree.findtext('.//error'))
                raise self.NoTweetsException(user)
            return {
                'text':
                latest.findtext('description').split(': ', 1)[1],
                'ago':
                ago(datetime.utcnow() -
                    parse_timestamp(latest.findtext('pubDate'))),
                'url':
                latest.findtext('guid'),
            }
        elif service['api'] == 'laconica':
            statuses = json_webservice(
                '%sstatuses/user_timeline/%s.json' %
                (service['endpoint'], user.encode('utf-8')), {'count': 1})
            if not statuses:
                raise self.NoTweetsException(user)
            latest = statuses[0]
            url = '%s/notice/%i' % (service['endpoint'].split(
                '/api/', 1)[0], latest['id'])

        return {
            'text': decode_htmlentities(latest['text']),
            'ago':
            ago(datetime.utcnow() - parse_timestamp(latest['created_at'])),
            'url': url,
        }
コード例 #22
0
    def remote_latest(self, service, user):
        if service['api'] == 'twitter':
            # Twitter ommits retweets in the JSON and XML results:
            statuses = generic_webservice(
                '%sstatuses/user_timeline/%s.atom' %
                (service['endpoint'], user.encode('utf-8')), {'count': 1})
            tree = ElementTree.fromstring(statuses)
            latest = tree.find('{http://www.w3.org/2005/Atom}entry')
            if latest is None:
                raise self.NoTweetsException(user)
            return {
                'text':
                latest.findtext('{http://www.w3.org/2005/Atom}content').split(
                    ': ', 1)[1],
                'ago':
                ago(datetime.utcnow() - parse_timestamp(
                    latest.findtext('{http://www.w3.org/2005/Atom}published'))
                    ),
                'url': [
                    x for x in latest.getiterator(
                        '{http://www.w3.org/2005/Atom}link')
                    if x.get('type') == 'text/html'
                ][0].get('href'),
            }
        elif service['api'] == 'laconica':
            statuses = json_webservice(
                '%sstatuses/user_timeline/%s.json' %
                (service['endpoint'], user.encode('utf-8')), {'count': 1})
            if not statuses:
                raise self.NoTweetsException(user)
            latest = statuses[0]
            url = '%s/notice/%i' % (service['endpoint'].split(
                '/api/', 1)[0], latest['id'])

        return {
            'text': decode_htmlentities(latest['text']),
            'ago':
            ago(datetime.utcnow() - parse_timestamp(latest['created_at'])),
            'url': url,
        }
コード例 #23
0
ファイル: social.py プロジェクト: B-Rich/ibid-1
    def remote_latest(self, service, user):
        if service['api'] == 'twitter':
            # Twitter ommits retweets in the JSON and XML results:
            statuses = generic_webservice('%sstatuses/user_timeline.rss'
                                          % service['endpoint'], {
                                              'screen_name': user,
                                              'count': 1
                                          })
            tree = ElementTree.fromstring(statuses)
            latest = tree.find('.//item')
            if latest is None:
                if tree.find('.//error'):
                    log.info('Twitter user_latest returned: %s',
                             tree.findtext('.//error'))
                raise self.NoTweetsException(user)
            return {
                'text': latest.findtext('description')
                        .split(': ', 1)[1],
                'ago': ago(datetime.utcnow() - parse_timestamp(
                    latest.findtext('pubDate'))),
                'url': latest.findtext('guid'),
            }
        elif service['api'] == 'laconica':
            statuses = json_webservice('%sstatuses/user_timeline/%s.json'
                    % (service['endpoint'], user.encode('utf-8')),
                    {'count': 1})
            if not statuses:
                raise self.NoTweetsException(user)
            latest = statuses[0]
            url = '%s/notice/%i' % (service['endpoint'].split('/api/', 1)[0],
                                    latest['id'])

        return {
            'text': decode_htmlentities(latest['text']),
            'ago': ago(datetime.utcnow()
                       - parse_timestamp(latest['created_at'])),
            'url': url,
        }
コード例 #24
0
ファイル: social.py プロジェクト: adrianmoisey/ibid
    def remote_latest(self, service, user):
        if service['api'] == 'twitter':
            # Twitter ommits retweets in the JSON and XML results:
            statuses = generic_webservice('%sstatuses/user_timeline/%s.atom'
                    % (service['endpoint'], user.encode('utf-8')),
                    {'count': 1})
            tree = ElementTree.fromstring(statuses)
            latest = tree.find('{http://www.w3.org/2005/Atom}entry')
            if latest is None:
                raise self.NoTweetsException(user)
            return {
                'text': latest.findtext('{http://www.w3.org/2005/Atom}content')
                        .split(': ', 1)[1],
                'ago': ago(datetime.utcnow() - parse_timestamp(
                    latest.findtext('{http://www.w3.org/2005/Atom}published'))),
                'url': [x for x
                     in latest.getiterator('{http://www.w3.org/2005/Atom}link')
                     if x.get('type') == 'text/html'
                  ][0].get('href'),
            }
        elif service['api'] == 'laconica':
            statuses = json_webservice('%sstatuses/user_timeline/%s.json'
                    % (service['endpoint'], user.encode('utf-8')),
                    {'count': 1})
            if not statuses:
                raise self.NoTweetsException(user)
            latest = statuses[0]
            url = '%s/notice/%i' % (service['endpoint'].split('/api/', 1)[0],
                                    latest['id'])

        return {
            'text': decode_htmlentities(latest['text']),
            'ago': ago(datetime.utcnow()
                       - parse_timestamp(latest['created_at'])),
            'url': url,
        }
コード例 #25
0
ファイル: urlprocess.py プロジェクト: derimagia/IBID-Plugins
 def getJsonFromUrl(self, url):
     return json_webservice(url)
コード例 #26
0
ファイル: social.py プロジェクト: B-Rich/ibid-1
    def remote_update(self, service, id):
        status = json_webservice('%sstatuses/show/%s.json' % (service['endpoint'], id))

        return {'screen_name': status['user']['screen_name'], 'text': decode_htmlentities(status['text'])}
コード例 #27
0
ファイル: geography.py プロジェクト: vhata/ibid
 def get_place_data(self, place, num):
     return json_webservice('http://ws.geonames.org/searchJSON', {'q': place, 'maxRows': num, 'username': '******'})
コード例 #28
0
ファイル: geography.py プロジェクト: B-Rich/ibid-1
 def get_place_data(self, place, num):
     return json_webservice('http://ws.geonames.org/searchJSON', {'q': place, 'maxRows': num, 'username': '******'})