Разделить строку RSS в Твиттере, используя Python - PullRequest
1 голос
/ 30 августа 2009

Я пытаюсь проанализировать RSS-каналы Twitter и поместить информацию в базу данных sqlite, используя Python. Вот пример:

MiamiPete: today's "Last Call" is now up http://bit.ly/MGDzu #stocks #stockmarket #finance #money

Я хочу создать один столбец для основного контента (Miami Pete…now up), один столбец для URL (http://bit.ly/MGDzu) и четыре отдельных столбца для хэштегов (акции, фондовый рынок, финансы, деньги). Я играл с тем, как это сделать.

Любой совет будет принята с благодарностью!

P.S. Ниже приведен пример кода, с которым я играл выше. :)

def store_feed_items(id, items):
    """ Takes a feed_id and a list of items and stored them in the DB """
    for entry in items:
        c.execute('SELECT entry_id from RSSEntries WHERE url=?', (entry.link,))
        tinyurl = entry.summary    ### I added this in
        print tinyurl.split('http') ### I added this in 
        if len(c.fetchall()) == 0:
            c.execute('INSERT INTO RSSEntries (id, url, title, content, tinyurl, date, tiny) VALUES (?,?,?,?,?,?,?)', (id, entry.link, entry.title, entry.summary, tinyurl, strftime("%Y-%m-%d %H:%M:%S",entry.updated_parsed), tiny ))

Ответы [ 4 ]

4 голосов
/ 30 августа 2009

Кажется, что ваш дизайн, управляемый данными, довольно несовершенен. Если у всех ваших записей нет текстовой части, URL-адреса и до 4 тегов, это не сработает.

Вам также нужно отделить сохранение в БД от разбора. Синтаксический анализ может быть легко выполнен с помощью регулярных выражений (или даже строковых методов):

>>> s = your_string
>>> s.split()
['MiamiPete:', "today's", '"Last', 'Call"', 'is', 'now', 'up', 'http://bit.ly/MGDzu', '#stocks', '#stockmarket', '#finance', '#money']
>>> url = [i for i in s.split() if i.startswith('http://')]
>>> url
['http://bit.ly/MGDzu']
>>> tags = [i for i in s.split() if i.startswith('#')]
>>> tags
['#stocks', '#stockmarket', '#finance', '#money']
>>> ' '.join(i for i in s.split() if i not in url+tags)
'MiamiPete: today\'s "Last Call" is now up'

Однако, возможно, придется пойти на разработку БД для одной таблицы.

2 голосов
/ 30 августа 2009

Кроме того, вы можете анализировать ваши строки, используя регулярные выражения:

>>> s = (u'MiamiPete: today\'s "Last Call" is now up http://bit.ly/MGDzu '
         '#stocks #stockmarket #finance #money')
>>> re.match(r'(.*) (http://[^ ]+)', s).groups()
(u'MiamiPete: today\'s "Last Call" is now up', u'http://bit.ly/MGDzu')
>>> re.findall(r'(#\w+)', s)
[u'#stocks', u'#stockmarket', u'#finance', u'#money']
1 голос
/ 31 августа 2009

Я очень рекомендую использовать Twitter API. На самом деле есть два API, один для основного сервера Twitter и один для поискового сервера. Они используются для разных вещей.

Вы можете найти пример кода, pytwitter на svn. Добавьте simplejson, и вы сможете делать очень мощные вещи за считанные минуты.

Удачи

1 голос
/ 30 августа 2009

Твиттер имеет API, который может быть проще использовать здесь, http://apiwiki.twitter.com/Twitter-API-Documentation.

Вы можете получить результаты в формате JSON или XML и использовать одну из множества библиотек Python для анализа результатов.

Или, если вам нужна ваша RSS, есть парсеры Python вроде http://www.feedparser.org/.

...