私はまれな正直なコンピュータサイエンスの問題を抱えています(通常の方法でこの言語を作成するのとは対照的に、私は頻繁に書くのではなく、何をするのか)問題が欲しい)、そして本当に変化のためのCSの学位の欠如を感じています。
リストのいくつかのディクテーションを使用しているため、これは少し厄介ですが、基本的な概念は次のとおりです。特定のツイートのリツイートをノードごとにグラフに追加し、元のツイートから外側に向かって構築するTwitterスクレイピング機能著者(フォロワーの関係をエッジとして)。
for t in RTs_list:
g = nx.DiGraph()
followers_list=collections.defaultdict(list)
level=collections.defaultdict(list)
hoppers=collections.defaultdict(list)
retweets = []
retweeters = []
try:
u = api.get_status(t)
original_tweet = u.retweeted_status.id_str
print original_tweet
ot = api.get_status(original_tweet)
node_adder(ot.user.id, 1)
# Can't paginate -- can only get about ~20 RTs max. Need to work on small data here.
retweets = api.retweets(original_tweet)
for r in retweets:
retweeters.append(r.user.id)
followers_list["0"] = api.followers_ids(ot.user.id)[0]
print len(retweets),"total retweets"
level["1"] = ot.user.id
g.node[ot.user.id]['crossover'] = 1
if g.node[ot.user.id]["followers_count"]<4000:
bum_node_adder(followers_list["0"],level["1"], 2)
for r in retweets:
rt_iterator(r,retweets,0,followers_list,hoppers,level)
except:
print ""
def rt_iterator(r,retweets,q,followers_list,hoppers,level):
q = q+1
if r.user.id in followers_list[str(q-1)]:
hoppers[str(q)].append(r.user.id)
node_adder(r.user.id,q+1)
g.add_edge(level[str(q)], r.user.id)
try:
followers_list[str(q)] = api.followers_ids(r.user.id)[0]
level[str(q+1)] = r.user.id
if g.node[r.user.id]["followers_count"]<4000:
bum_node_adder(followers_list[str(q)],level[str(q+1)],q+2)
crossover = pull_crossover(followers_list[str(q)],followers_list[str(q-1)])
if q<10:
for r in retweets:
rt_iterator(r,retweets,q,followers_list,hoppers,level)
except:
print ""
そこには他にもいくつかの関数呼び出しがありますが、それらは問題とは関係ありません。主な問題は、(たとえば)2ホップノードから3ホップノードに移動するときにQがどのようにカウントされるかです。中心からのすべてのブランチの最大深度(10)まで構築する必要がありますが、現在は、最初に試行するブランチの最大深度まで構築しているだけだと思います。それが理にかなっていることを願っています。そうでない場合は、ここに入力することで役に立ちました。どこかでループが抜けているだけだと思いますが、見るのは大変です。
また、さまざまなdictがQ + 1またはQ-1を参照していることを無視してください。これは、リファクタリングして反り返らせる前にこれを実装した方法のアーティファクトです。
ありがとう!