Я работаю над созданием сценариев с использованием python, mongodb и модуля pymongo для извлечения определенных аспектов API Twitter и сохранения их в базе данных mongo.Я написал несколько сценариев для разных целей: доступа к API поиска, доступа к user_timeline и многого другого.Однако я только знакомлюсь со всеми инструментами, с которыми я работаю, и пришло время вернуться и сделать их более эффективными.Таким образом, сейчас я работаю над добавлением функций и классов в мои скрипты.Вот один из моих сценариев без функций или классов:
#!/usr/local/bin/python
import twitter
import datetime
from datetime import date, timedelta, datetime
import pymongo
from pymongo import Connection
# Twitter handle that we are scraping mentions for
SCREEN_NAME = '@twitterapi'
# Connect to the database
connection = Connection()
db = connection.test
collection = db.twitterapi_mentions # Change the name of this database
t = twitter.Twitter(domain='search.twitter.com')
# Fetch the information from the API
results = []
for i in range(2):
i+=1
response = t.search(q=SCREEN_NAME, result_type='recent', rpp=100, page=i)['results']
results.extend(response)
# Create a document in the database for each item taken from the API
for tweet in results:
id_str = tweet['id_str']
twitter_id = tweet['from_user']
tweetlink = "http://twitter.com/#!/%s/status/%s" % (twitter_id, id_str)
created_at = datetime.strptime(tweet['created_at'], "%a, %d %b %Y %H:%M:%S +0000")
date = created_at.date().strftime("%m/%d/%y")
time = created_at.time().strftime("%H:%M:%S")
text = tweet['text']
identifier = {'id' : id_str}
entries = {'id' : id_str, 'tweetlink' : tweetlink, 'date' : date, 'time' : time, 'text' : text, 'twitter_id':twitter_id }
collection.update(identifier, entries, upsert = True)
Эти сценарии работают хорошо для меня, но я должен запустить один и тот же сценарий для нескольких дескрипторов твиттера.Например, я скопирую тот же сценарий и изменю следующие две строки:
SCREEN_NAME = '@cocacola'
collection = db.cocacola_mentions
Таким образом, я получаю упоминания как для @twitterapi, так и для @cocacola.Я много думал о том, как я могу превратить это в функцию.Самая большая проблема, с которой я столкнулся, - это найти способ изменить название коллекции.Например, рассмотрим этот сценарий:
#!/usr/local/bin/python
import twitter
import datetime
from datetime import date, timedelta, datetime
import pymongo
from pymongo import Connection
def getMentions(screen_name):
# Connect to the database
connection = Connection()
db = connection.test
collection = db.screen_name # Change the name of this database
t = twitter.Twitter(domain='search.twitter.com')
# Fetch the information from the API
results = []
for i in range(2):
i+=1
response = t.search(q=screen_name, result_type='recent', rpp=100, page=i) ['results']
results.extend(response)
# Create a document in the database for each item taken from the API
for tweet in results:
id_str = tweet['id_str']
twitter_id = tweet['from_user']
tweetlink = "http://twitter.com/#!/%s/status/%s" % (twitter_id, id_str)
created_at = datetime.strptime(tweet['created_at'], "%a, %d %b %Y %H:%M:%S +0000")
date = created_at.date().strftime("%m/%d/%y")
time = created_at.time().strftime("%H:%M:%S")
text = tweet['text']
identifier = {'id' : id_str}
entries = {'id' : id_str, 'tweetlink' : tweetlink, 'date' : date, 'time' : time, 'text' : text, 'twitter_id':twitter_id }
collection.update(identifier, entries, upsert = True)
getMentions("@twitterapi")
getMentions("@cocacola")
Если я использую приведенный выше сценарий, то все данные сохраняются в коллекции "имя_экранов", но я хочу, чтобы они сохранялись в отображаемом имени экрана,В идеале, я хочу, чтобы упоминания @twitterapi были в коллекции "twitterapi_mentions", и я хочу, чтобы упоминания @cocacola были в коллекции "cocacola_mentions".Я полагаю, что использование класса pymongo Collection может быть ответом, и я прочитал документацию, но не могу заставить ее работать.Если у вас есть другие предложения о том, как мне сделать этот скрипт более эффективным, они будут очень благодарны.В противном случае, пожалуйста, извините за любые ошибки, которые я сделал, как я уже сказал, я новичок в этом.