Spaces:
Configuration error
Configuration error
import requests | |
import plotly.graph_objects as go | |
import networkx as nx | |
import time | |
import matplotlib.pyplot as plt | |
from PersonalData import access_token | |
api_version = '5.131' | |
my_id = '167196653' | |
read_id = input("Type interested vk id or write \"0\" to use default: ") | |
if read_id != '0': | |
my_id = read_id | |
print("my_id changed", my_id) | |
friend_num = int(input("Type how many friends you want to show or write \"0\" show all: ")) | |
params_for_users_get = {'user_ids': my_id, | |
'access_token': access_token, | |
'v': api_version} | |
myFirstAndLastName = requests.get('https://api.vk.com/method/users.get', params=params_for_users_get) | |
#print(myFirstAndLastName.text) | |
params_for_friends_get = {'user_id': my_id, | |
'order': 'hints', | |
'fields': 'sex', | |
'access_token': access_token, | |
'v': api_version} | |
r = requests.get('https://api.vk.com/method/friends.get', params=params_for_friends_get) | |
if 'error' in r.json() and r.json()['error']['error_code'] == 30: | |
print('This is private profile, sorry') | |
exit() | |
print(r.text) | |
AllMyFriends = r.json()['response']['items'] | |
#print(AllMyFriends[0]['id']) | |
#print(AllMyFriends[0]['is_closed']) | |
#print(AllMyFriends) | |
AllMyFriendsWithoutClosed = [i for i in AllMyFriends if 'is_closed' in i and i['is_closed'] == False] | |
if friend_num == 0: | |
friend_num = len(AllMyFriendsWithoutClosed) | |
G = nx.Graph() | |
def GetFriendListById(friend_id): | |
while True: | |
params_for_another_friends_get = {'user_id': friend_id, | |
'order': 'random', | |
'access_token': access_token, | |
'v': api_version} | |
res = requests.get('https://api.vk.com/method/friends.get', params=params_for_another_friends_get) | |
print(res.text) | |
res_json = res.json(); | |
if 'error' in res_json: | |
if res_json['error']['error_code'] == 6: | |
time.sleep(0.8) | |
continue | |
if res_json['error']['error_code'] == 30: | |
return [], False | |
return [], False | |
if 'response' in res_json: | |
return res_json['response']['items'], True | |
return [], False | |
MyFriends = AllMyFriendsWithoutClosed[:friend_num-1] | |
#MyFriends.append(myFirstAndLastName.json()['response'][0]) | |
MyFriendsSet = set([i['id'] for i in MyFriends]) | |
MyFriendsDict = dict([(i['id'], i) for i in MyFriends]) | |
MyFriendsDict[int(my_id)] = myFirstAndLastName.json()['response'][0] | |
#print(MyFriends) | |
#print(G.nodes()) | |
for friend_id in MyFriends: | |
friendFriendList, Flag = GetFriendListById(friend_id['id']) | |
if not Flag: | |
continue | |
G.add_edge(friend_id['id'], int(my_id)) | |
for friendFriend_id in friendFriendList: | |
if friendFriend_id in MyFriendsSet: | |
G.add_edge(friend_id['id'], friendFriend_id) | |
G_nodes_list = list(G.nodes) | |
#print(G_nodes_list) | |
pos = nx.spring_layout(G) | |
#print(pos) | |
nx.draw_networkx_nodes(G, pos, node_size=50) | |
nx.draw_networkx_edges(G, pos, edge_color='b') | |
plt.show() | |
edge_x = [] | |
edge_y = [] | |
for edge in G.edges(): | |
x0, y0 = pos.get(edge[0]) # G.nodes[edge[0]]['pos'] | |
x1, y1 = pos.get(edge[1]) # G.nodes[edge[1]]['pos'] | |
edge_x.append(x0) | |
edge_x.append(x1) | |
edge_x.append(None) | |
edge_y.append(y0) | |
edge_y.append(y1) | |
edge_y.append(None) | |
edge_trace = go.Scatter( | |
x=edge_x, y=edge_y, | |
line=dict(width=0.5, color='#888'), | |
hoverinfo='none', | |
mode='lines') | |
node_x = [] | |
node_y = [] | |
for node in G.nodes(): | |
# print(node) | |
x, y = pos.get(node) # G.nodes[node]['pos'] | |
node_x.append(x) | |
node_y.append(y) | |
node_trace = go.Scatter( | |
x=node_x, y=node_y, | |
mode='markers', | |
hoverinfo='text', | |
marker=dict( | |
showscale=True, | |
# colorscale options | |
# 'Greys' | 'YlGnBu' | 'Greens' | 'YlOrRd' | 'Bluered' | 'RdBu' | | |
# 'Reds' | 'Blues' | 'Picnic' | 'Rainbow' | 'Portland' | 'Jet' | | |
# 'Hot' | 'Blackbody' | 'Earth' | 'Electric' | 'Viridis' | | |
colorscale='YlGnBu', | |
reversescale=True, | |
color=[], | |
size=10, | |
colorbar=dict( | |
thickness=15, | |
title='Node Edges', | |
xanchor='left', | |
titleside='right' | |
), | |
line_width=2)) | |
node_adjacencies = [] | |
node_text = [] | |
#print(MyFriendsDict) | |
# print(G_nodes_list[1]) | |
# print(MyFriendsDict[G_nodes_list[1]]['first_name']) | |
for node, adjacencies in enumerate(G.adjacency()): | |
node_adjacencies.append(len(adjacencies[1])) | |
node_text.append(MyFriendsDict[G_nodes_list[node]]['first_name'] + ' ' + MyFriendsDict[G_nodes_list[node]]['last_name'] + ' ' + str(len(adjacencies[1])) + ' edges') | |
# print(node) | |
node_trace.marker.color = node_adjacencies | |
node_trace.text = node_text | |
fig = go.Figure(data=[edge_trace, node_trace], | |
layout=go.Layout( | |
title='<br>Social graph to ' + myFirstAndLastName.json()['response'][0]['first_name'] + ' ' + myFirstAndLastName.json()['response'][0]['last_name'], | |
titlefont_size=16, | |
showlegend=False, | |
hovermode='closest', | |
margin=dict(b=20, l=5, r=5, t=40), | |
annotations=[dict( | |
text="Python code: <a href='https://github.com/Akuva2001/SocialGraph'> https://github.com/Akuva2001/SocialGraph</a>", | |
showarrow=False, | |
xref="paper", yref="paper", | |
x=0.005, y=-0.005)], | |
xaxis=dict(showgrid=False, zeroline=False, showticklabels=False), | |
yaxis=dict(showgrid=False, zeroline=False, showticklabels=False)) | |
) | |
fig.show() | |