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
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