のこりの残骸を放置する。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 件のコメント:
コメントを投稿