のこりの残骸を放置する。ahooonがアカウント削除したおかげで、あとからデータとるやり方では
どうしても追跡できない部分ができてしまう。viratterは定期的にデータをとっているので
そのようなことは起こらない。しかしどんだけのtweetをDLして持っているのだろう?
どうguessして埋めるかを考えるモノまた楽しみではあるが。
#!/usr/bin/python
# coding:utf8
import pickle
import re
#def make_strucure(
f = open('data.pkl')
try:
all = pickle.load(f)
finally:
f.close()
peopleTweet = {}
users = {}
for tweet in all.values():
user_id = tweet['from_user_id']
tweeted = peopleTweet.get(user_id, None)
if not tweeted:
tweeted = []
tweeted.append(tweet['id'])
peopleTweet[user_id] = tweeted
user_name = tweet['from_user']
possible = users.get(user_name, None)
if not possible:
possible = []
if user_id not in possible:
possible.append(user_id)
users[user_name] = possible
USERNAME_PATTERN = r'(?P[_A-Za-z0-9]+)'
RETWEET_PATTERN = r'(RT )?@' + USERNAME_PATTERN + r':'
RETWEET_RE = re.compile(RETWEET_PATTERN)
def GuessParent(tweet):
text = tweet['text']
m = RETWEET_RE.match(text)
if not m:
return None
n = (m.groupdict()['username']).encode('ascii')
from_parent = text[len(n):]
if n not in users:
#this means that n is a special user !
users[n] = [n,]
candidates = users[n]
if not len(candidates) == 1:
print n, candidates
c = candidates[0]
try:
ts = peopleTweet[c]
except:
return c #ugh!
for t in ts:
t = all[t]
if t['text'].startswith(from_parent):
return t['id']
return None
RT = {}
for tweet in all.values():
parent = GuessParent(tweet)
if not parent:
continue
children = RT.get(parent, None)
if not children:
children = []
children.append(tweet['id'])
RT[parent] = children
print RT
0 コメント:
コメントを投稿