Exemplo n.º 1
0
    def get_speaker_metadata(self, speaker):
        pieces = speaker.split(' of ')
        lastname = pieces[0].lower()
        if lastname.startswith('mr.') or lastname.startswith('ms.') or lastname.startswith('mrs.'):
            i = lastname.find('.')
            lastname = lastname[i+1:].strip()
        if len(pieces) > 1:
            state = pieces[1]
        else:
            state = None
        # get the chamber info
        chamber = self.get_text('chamber').lower()
        if chamber == 'senate':
            position = 'senator'
        else:
            position = 'representative'

        day = self.get_text('day')
        month = self.get_text('month')
        year = self.get_text('year')
        date = '%s-%s-%s' % (year, numeric_months[month.lower()], day)

        if chamber == 'extensions':
            chamber = 'house'

        #data = db_bioguide_lookup(lastname, self.get_text('congress'), position, state)
        data = db_bioguide_lookup(lastname, self.get_text('congress'), chamber, date, state)

        if not data or len(data) > 1:
            data = fallback_bioguide_lookup(speaker, self.get_text('congress'), position)
            if not data:
                msg = 'No data or too many responses for %s, %s, %s, %s\n' % (lastname, self.year, position, state)
                print msg
                logfile = initialize_logfile()
                logfile.write('%s: %s' % (self.filename, msg))
                logfile.flush()
                return None

        match = data[0]
        #for k, v in match.iteritems():
        #    match[k] = v.encode('utf-8')

        xml = ''
        xml += '''<field name="%s">%s</field>\n''' % ('speaker_bioguide', match['bioguide'])
        xml += '''<field name="%s">%s</field>\n''' % ('speaker_party', match['party'])
        xml += '''<field name="%s">%s</field>\n''' % ('speaker_state', match['state'])
        xml += '''<field name="%s">%s</field>\n''' % ('speaker_firstname', match['firstname'])
        xml += '''<field name="%s">%s</field>\n''' % ('speaker_middlename', match.get('middlename', ''))
        xml += '''<field name="%s">%s</field>\n''' % ('speaker_lastname', match['lastname'])
        xml += '''<field name="%s">%s</field>\n''' % ('speaker_title', match['title'])
        xml += '''<field name="%s">%s</field>\n''' % ('speaker_district', match['district'])
        return xml
Exemplo n.º 2
0
    def get_speaker_metadata(self, speaker):
        pieces = speaker.split(' of ')
        lastname = pieces[0].lower()
        if lastname.startswith('mr.') or lastname.startswith('ms.') or lastname.startswith('mrs.'):
            i = lastname.find('.')
            lastname = lastname[i+1:].strip()
        if len(pieces) > 1:
            state = pieces[1]
        else:
            state = None
        # get the chamber info
        chamber = self.get_text('chamber').lower()
        if chamber == 'senate':
            position = 'senator'
        else:
            position = 'representative'

        # add some redundancy into the bioguide lookup (servers can be sketchy)
        tries = 1
        data = False # use False because bioguide_lookup returns None if no data found.
        while data == False and tries < 3:
            try:
                data = db_bioguide_lookup(lastname, self.year, position, state)
            except:
                tries += 1

        if not data or len(data) > 1:
            print data
            print 'No data or too many responses for %s, %s, %s, %s' % (lastname, self.year, position, state)
            return None
        xml = ''
        xml += '''<field name="%s">%s</field>\n''' % ('speaker_bioguide', data[0]['bioguide'])
        xml += '''<field name="%s">%s</field>\n''' % ('speaker_party', data[0]['party'])
        xml += '''<field name="%s">%s</field>\n''' % ('speaker_state', data[0]['state'])
        xml += '''<field name="%s">%s</field>\n''' % ('speaker_firstname', data[0]['firstname'])
        xml += '''<field name="%s">%s</field>\n''' % ('speaker_lastname', data[0]['lastname'])
        return xml