{"id":264867,"date":"2015-09-03T21:30:03","date_gmt":"2015-09-03T17:30:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=264867"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=264867","title":{"rendered":"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u0430\u043d\u0430\u043b\u0438\u0437 \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 VK API"},"content":{"rendered":"<p>     \t<img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/408\/cf6\/ffa\/408cf6ffaacf418baebe11dbcc000cf8.png\" align=\"right\" width=\"300\"\/><br \/>  \u0414\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439 \u2014 \u043d\u0435\u0438\u0441\u0447\u0435\u0440\u043f\u0430\u0435\u043c\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0438 \u0431\u0438\u0437\u043d\u0435\u0441-\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439. \u041d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0412\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0435 API \u0438 \u044f\u0437\u044b\u043a\u0430 Python \u043c\u044b \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043f\u0430\u0440\u0443 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u0443\u0437\u043d\u0430\u0442\u044c:<\/p>\n<ul>\n<li>\u0430\u0437\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 Python \u2014 networkx;<\/li>\n<li>\u043a\u0430\u043a \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u0412\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0435 API \u0438\u0437 \u044f\u0437\u044b\u043a\u0430 Python \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0440\u0443\u0437\u0435\u0439 \u0438 \u0447\u043b\u0435\u043d\u043e\u0432 \u0433\u0440\u0443\u043f\u043f;<\/li>\n<li>\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b Gephi.<\/li>\n<\/ul>\n<p>  Disclaimer: \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0435 \u043f\u0440\u0435\u0442\u0435\u043d\u0434\u0443\u0435\u0442 \u043d\u0430 \u043a\u0430\u043a\u0443\u044e-\u043b\u0438\u0431\u043e \u043d\u043e\u0432\u0438\u0437\u043d\u0443, \u0430 \u043b\u0438\u0448\u044c \u043f\u0440\u0435\u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0446\u0435\u043b\u044c \u043f\u043e\u043c\u043e\u0447\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u043c\u0441\u044f \u0441\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0441\u0438\u043b\u0430\u043c\u0438 \u0438 \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u0440\u0435\u0442\u0432\u043e\u0440\u044f\u0442\u044c \u0441\u0432\u043e\u0438 \u0438\u0434\u0435\u0438 \u0432 \u0436\u0438\u0437\u043d\u044c.<br \/>  <i>(\u0432\u043e\u043b\u043e\u0441\u044f\u043d\u043e\u0439 \u0448\u0430\u0440 \u0434\u043b\u044f \u043f\u0440\u0438\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f)<\/i><br \/>  <a name=\"habracut\"><\/a><\/p>\n<p>  \u0418 \u043d\u0430\u0447\u043d\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0441 \u043f\u0435\u0440\u0432\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438: \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u044d\u0433\u043e\u0446\u0435\u043d\u0442\u0440\u0438\u0447\u043d\u044b\u0439 \u0433\u0440\u0430\u0444 \u0434\u0440\u0443\u0437\u0435\u0439, \u0443\u0434\u0430\u043b\u0438\u0432 \u0441\u0435\u0431\u044f \u0441\u0430\u043c\u043e\u0433\u043e.<\/p>\n<pre><code class=\"python\">import requests import networkx import time import collections   def get_friends_ids(user_id):     friends_url = 'https:\/\/api.vk.com\/method\/friends.get?user_id={}'      # \u0442\u0430\u043a\u0436\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c access_token \u0432 \u0437\u0430\u043f\u0440\u043e\u0441, \u043f\u043e\u043b\u0443\u0447\u0438\u0432 \u0435\u0433\u043e \u0447\u0435\u0440\u0435\u0437 OAuth 2.0     json_response = requests.get(friends_url.format(user_id)).json()     if json_response.get('error'):         print json_response.get('error')         return list()     return json_response[u'response']   graph = {} friend_ids = get_friends_ids(1405906)  # \u0432\u0430\u0448 user id, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0440\u0430\u0444 \u0434\u0440\u0443\u0437\u0435\u0439. for friend_id in friend_ids:     print 'Processing id: ', friend_id     graph[friend_id] = get_friends_ids(friend_id)  g = networkx.Graph(directed=False) for i in graph:     g.add_node(i)     for j in graph[i]:         if i != j and i in friend_ids and j in friend_ids:             g.add_edge(i, j)  pos=networkx.graphviz_layout(g,prog=&quot;neato&quot;) networkx.draw(g, pos, node_size=30, with_labels=False, width=0.2) <\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u0434\u0430 \u0441\u0442\u0430\u043b \u0434\u0430\u043d\u043d\u044b\u0439 \u0433\u0440\u0430\u0444:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/e74\/c4a\/bc2\/e74c4abc26ca4ba8bec597ae7f227689.png\"\/><br \/>  \u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0433\u043b\u0430\u0437\u0430\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c 2 \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u0438: \u0434\u0440\u0443\u0437\u0435\u0439 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0433\u043e\u0440\u043e\u0434\u043e\u0432 \u043f\u0440\u043e\u0436\u0438\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0442\u0443 \u0438\u043b\u0438 \u0438\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438\u043b\u0438 \u0434\u043b\u044f \u0434\u0440\u0443\u0437\u0435\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0447\u0430\u0441\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438\u043d\u043e\u0433\u0434\u0430 \u043c\u043e\u0433\u0443\u0442 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 (\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 access \u0442\u043e\u043a\u0435\u043d\u0430). \u0412 \u0442\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0435\u0441\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0432 \u0432\u0438\u0434\u0435 \u043b\u0438\u043c\u0438\u0442\u043e\u0432 \u043d\u0430 API. \u0412 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 VK \u0443\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e \u0434\u043b\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043b\u0438\u043c\u0438\u0442 \u2014 3rps, \u0430 \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u0430\u044f \u0448\u043a\u0430\u043b\u0430 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0447\u0438\u0441\u043b\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (rps\/\u0447\u0438\u0441\u043b\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a): 5\/&lt;10000, 8\/&lt;100000, 20\/&lt;1000000. 35\/&gt;1000000.<br \/>  \u0422\u0430\u043a\u0436\u0435 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0435\u0441\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0430\u0431\u0437\u0430\u0446:  <\/p>\n<blockquote><p>\u041f\u043e\u043c\u0438\u043c\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u0432\u044b\u0437\u043e\u0432 \u043e\u0434\u043d\u043e\u0442\u0438\u043f\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432. \u041f\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c, \u043c\u044b \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u043e\u0447\u043d\u044b\u0445 \u043b\u0438\u043c\u0438\u0442\u0430\u0445. <\/p><\/blockquote>\n<p>  \u0422\u0430\u043a, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0432\u044b\u0437\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u0430 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u0440\u043e\u0444\u0438\u043b\u044f <b>users.search<\/b> \u0438\u043b\u0438 \u043c\u0435\u0442\u043e\u0434 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0441\u0442\u0435\u043d\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f <b>wall.get<\/b> \u043f\u0440\u0438 \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u0438\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043b\u0438\u043c\u0438\u0442\u0430 (\u043d\u043e \u043f\u0440\u0438 \u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u0438\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043b\u0438\u043c\u0438\u0442\u043e\u0432) \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b. \u042d\u0442\u0430 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0440\u043e\u0434\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438: \u0442\u0430\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u043f\u043e\u0438\u0441\u043a\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u043e \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u043e\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u043d\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432, \u0430 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u043d\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442.<\/p>\n<p>  \u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0432\u0430\u043c \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043b\u0438\u043c\u0438\u0442\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 3 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443.  <\/p>\n<pre><code class=\"python\">deq = collections.deque(maxlen=4) def trottling_request(url):     deq.appendleft(time.time())     if len(deq) == 4:         # 3 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e - \u043f\u043e\u0434\u043e\u0436\u0434\u0435\u043c         time.sleep(max(1+deq[3]-deq[0], 0)) <\/code><\/pre>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u0436\u0435 \u0433\u0440\u0430\u0444\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b Gephi. Gephi \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0433\u0440\u0430\u0444\u043e\u0432, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u043d\u0430 Java, \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u0430\u044f \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0430\u043c\u0438 \u0422\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430 \u041a\u043e\u043c\u043f\u044c\u0435\u043d\u044f \u0432\u043e \u0424\u0440\u0430\u043d\u0446\u0438\u0438. Gephi \u0431\u044b\u043b\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u0430 \u0434\u043b\u044f \u0443\u0447\u0430\u0441\u0442\u0438\u044f \u0432 Google Summer Code \u0432 2009, 2010, 2011, 2012 \u0438 2013 \u0433\u043e\u0434\u0430\u0445 [wiki].<\/p>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u043d\u0430\u0448 \u0433\u0440\u0430\u0444 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442 .graphml \u2014 \u0444\u043e\u0440\u043c\u0430\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u043e\u0432 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 XML.  <\/p>\n<pre><code class=\"python\">networkx.write_graphml(g, 'graph.graphml') <\/code><\/pre>\n<p>  \u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0432, \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u0432 Gephi \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/1f5\/3b8\/6c5\/1f53b86c5bf349af9cc245f5889a272e.png\" width=\"300\"\/><br \/>  Gephi \u0438\u043c\u0435\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432. \u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<br \/>  \u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c (PageRank centrality, Degree centrality, Eccentricity centrality). \u0420\u0430\u0437\u043d\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u044b \u0440\u0430\u0437\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/d9e\/4ba\/3f8\/d9e4ba3f8db54f22b8942c7ef4ce7fb9.png\" width=\"300\"\/><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/b9a\/596\/7d5\/b9a5967d5d744d32880aad4c9e027e6c.png\" width=\"300\"\/><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/bcc\/3c6\/dc6\/bcc3c6dc6aa8428e9a98c57144504558.png\" width=\"300\"\/><br \/>  \u041a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044f (Modularity \u0441lustering, Markov \u0441lustering, Chinese Whispers \u0441lustering). \u0420\u0430\u0437\u043d\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u044b \u0440\u0430\u0437\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/c14\/117\/e5b\/c14117e5b96f4d9db53d387610b327fa.png\" width=\"300\"\/><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/4e5\/951\/790\/4e5951790f69438f8d151ccb6401f64e.png\" width=\"300\"\/><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/ddd\/78b\/ff2\/ddd78bff26c945db982933a67204f19f.png\" width=\"300\"\/><\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0430\u0432\u0435\u044f\u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0445 \u0440\u0430\u0431\u043e\u0442 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u043a\u0443\u0440\u0441\u0430 <a href=\"http:\/\/newprolab.com\/bigdata\">\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442 \u043f\u043e \u0411\u043e\u043b\u044c\u0448\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u043c<\/a> \u043e\u0442 New Professions Lab. \u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u0433\u0440\u0443\u043f\u043f \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 \u0412\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0440\u0430\u0444:  <\/p>\n<ul>\n<li>\u0432\u0435\u0440\u0448\u0438\u043d\u044b \u2014 \u0433\u0440\u0443\u043f\u043f\u044b \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438;<\/li>\n<li>\u0440\u0451\u0431\u0440\u0430 \u2014 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u0431\u0449\u0438\u0445 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u043e\u0432;<\/li>\n<li>\u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0443 \u0434\u0430\u043d\u043d\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u044b \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u043e\u0432, \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0440\u0430\u0437\u043c\u0435\u0440 \u0432\u0435\u0440\u0448\u0438\u043d\u044b;<\/li>\n<li>\u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0443 \u0433\u0440\u0443\u043f\u043f \u043e\u0431\u0449\u0438\u0445 \u043f\u043e\u043f\u0438\u0441\u0447\u0438\u043a\u043e\u0432, \u0442\u0435\u043c \u0431\u043b\u0438\u0436\u0435 \u0434\u0440\u0443\u0433 \u043a \u0434\u0440\u0443\u0433\u0443 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u0432\u0435\u0440\u0448\u0438\u043d\u044b.<\/li>\n<\/ul>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0433\u0440\u0443\u043f\u043f \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u044b \u043d\u043e\u0432\u043e\u0441\u0442\u043d\u044b\u0445 \u0438\u0437\u0434\u0430\u043d\u0438\u0439, \u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0433\u0440\u0443\u043f\u043f\u044b.<\/p>\n<pre><code class=\"python\">%matplotlib inline import networkx import requests import json  def getVKMembers(group_id, count=1000, offset=0):     # http:\/\/vk.com\/dev\/groups.getMembers     host = 'http:\/\/api.vk.com\/method'     if count &gt; 1000:         raise Exception('Bad params: max of count = 1000')     response = requests.get('{host}\/groups.getMembers?group_id={group_id}&count={count}&offset={offset}'                             .format(host=host, group_id=group_id, count=count, offset=offset))     if not response.ok:         raise Exception('Bad response code')     return response.json()  def allCountOffset(func, func_id):     set_members_id = set()     count_members = -1     offset = 0     while count_members != len(set_members_id): # posible endless loop for real vk api         response = func(func_id, offset=offset)['response']         if count_members != response['count']:             count_members = response['count']         new_members_id = response['users']         offset += len(new_members_id)         if set_members_id | set(new_members_id) == set_members_id != set(): # without new members             print 'WARNING: break loop', count_members, len(set_members_id)             break         set_members_id = set_members_id.union(new_members_id)      return set_members_id  groups = ['http:\/\/vk.com\/meduzaproject', 'http:\/\/vk.com\/tj', 'http:\/\/vk.com\/smmrussia', 'http:\/\/vk.com\/vedomosti', 'http:\/\/vk.com\/kommersant_ru', 'http:\/\/vk.com\/kfm', 'http:\/\/vk.com\/oldlentach', 'http:\/\/vk.com\/lentaru', 'http:\/\/vk.com\/lentasport', 'http:\/\/vk.com\/fastslon', 'http:\/\/vk.com\/tvrain', 'http:\/\/vk.com\/sport.tvrain', 'http:\/\/vk.com\/silverrain', 'http:\/\/vk.com\/afishagorod', 'http:\/\/vk.com\/afishavozduh', 'http:\/\/vk.com\/afishavolna', 'http:\/\/vk.com\/1tv', 'http:\/\/vk.com\/russiatv', 'http:\/\/vk.com\/vesti', 'http:\/\/vk.com\/ntv', 'http:\/\/vk.com\/lifenews_ru']  members = {} for g in groups:     name = g.split('http:\/\/vk.com\/')[1]     print name     members[name] = allCountOffset(getVKMembers, name)      matrix = {}  for i in members:     for j in members:         if i != j:             matrix[i+j] = len(members[i] & members[j]) * 1.0\/ min(len(members[i]), len(members[j]))  max_matrix = max(matrix.values()) min_matrix = min(matrix.values())  for i in matrix:     matrix[i] = (matrix[i] - min_matrix) \/ (max_matrix - min_matrix)      g = networkx.Graph(directed=False) for i in members:     for j in members:         if i != j:             g.add_edge(i, j, weight=matrix[i+j])              members_count = {x:len(members[x]) for x in members}  max_value = max(members_count.values()) * 1.0 size = [] max_size = 900 min_size = 100 for node in g.nodes():     size.append(((members_count[node]\/max_value)*max_size + min_size)*10)      import matplotlib.pyplot as plt pos=networkx.spring_layout(g) plt.figure(figsize=(20,20)) networkx.draw_networkx(g, pos, node_size=size, width=0.5, font_size=8) plt.axis('off') plt.show() <\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0439 \u0433\u0440\u0430\u0444:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/d75\/184\/146\/d751841468776a05511ee9da9a8f6b28.png\"\/><\/p>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0442\u0443\u0442 \u0437\u0430\u0434\u0430\u0447\u0438 \u043b\u0438\u0448\u044c \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0443 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u0435\u0442\u044f\u043c\u0438. \u041d\u0430 \u0434\u0435\u043b\u0435 \u0436\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0440\u0435\u0448\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438. \u0422\u0430\u043a, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u043c\u043e\u0433\u0443\u0442 \u043e\u0431\u043e\u0433\u0430\u0442\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 DMP \u0441\u0438\u0441\u0442\u0435\u043c (\u0432\u043e\u0437\u0440\u0430\u0441\u0442, \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u044b, \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0433\u0440\u0443\u043f\u043f\u0430): \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0439\u0442\u0438 \u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e DMP-\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0435\u0433\u043e \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c. \u0422\u0430\u043a\u0436\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0440\u0442\u0430\u043f\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0442\u0438 \u043a\u0430\u043a \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u0437\u044e\u043c\u0435: amazinghiring, entelo, profiscope, gild \u0438 \u0434\u0440. \u0413\u043b\u0430\u0432\u043d\u044b\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438 \u0437\u0434\u0435\u0441\u044c \u0431\u0443\u0434\u0435\u0442: \u043d\u0430\u0439\u0442\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0433\u043e \u0436\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u044f\u0445 \u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0438\u0437 \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439, \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u0435\u0437\u044e\u043c\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439, \u043a\u0440\u043e\u043c\u0435, \u0440\u0430\u0437\u0432\u0435 \u0447\u0442\u043e, linkedin, \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0434\u043b\u044f \u0440\u0435\u0437\u044e\u043c\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.     \t<\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/263313\/\"> http:\/\/habrahabr.ru\/post\/263313\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>     \t<img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/408\/cf6\/ffa\/408cf6ffaacf418baebe11dbcc000cf8.png\" align=\"right\" width=\"300\"\/><br \/>  \u0414\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439 \u2014 \u043d\u0435\u0438\u0441\u0447\u0435\u0440\u043f\u0430\u0435\u043c\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0438 \u0431\u0438\u0437\u043d\u0435\u0441-\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439. \u041d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0412\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0435 API \u0438 \u044f\u0437\u044b\u043a\u0430 Python \u043c\u044b \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043f\u0430\u0440\u0443 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u0443\u0437\u043d\u0430\u0442\u044c:<\/p>\n<ul>\n<li>\u0430\u0437\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 Python \u2014 networkx;<\/li>\n<li>\u043a\u0430\u043a \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u0412\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0435 API \u0438\u0437 \u044f\u0437\u044b\u043a\u0430 Python \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0440\u0443\u0437\u0435\u0439 \u0438 \u0447\u043b\u0435\u043d\u043e\u0432 \u0433\u0440\u0443\u043f\u043f;<\/li>\n<li>\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b Gephi.<\/li>\n<\/ul>\n<p>  Disclaimer: \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0435 \u043f\u0440\u0435\u0442\u0435\u043d\u0434\u0443\u0435\u0442 \u043d\u0430 \u043a\u0430\u043a\u0443\u044e-\u043b\u0438\u0431\u043e \u043d\u043e\u0432\u0438\u0437\u043d\u0443, \u0430 \u043b\u0438\u0448\u044c \u043f\u0440\u0435\u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0446\u0435\u043b\u044c \u043f\u043e\u043c\u043e\u0447\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u043c\u0441\u044f \u0441\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0441\u0438\u043b\u0430\u043c\u0438 \u0438 \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u0440\u0435\u0442\u0432\u043e\u0440\u044f\u0442\u044c \u0441\u0432\u043e\u0438 \u0438\u0434\u0435\u0438 \u0432 \u0436\u0438\u0437\u043d\u044c.<br \/>  <i>(\u0432\u043e\u043b\u043e\u0441\u044f\u043d\u043e\u0439 \u0448\u0430\u0440 \u0434\u043b\u044f \u043f\u0440\u0438\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f)<\/i>  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-264867","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/264867","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=264867"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/264867\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=264867"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=264867"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=264867"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}