Как получить количество репостов в Google+, а не плюс один

Я пытаюсь найти способ получить количество «акций» для сообщения google+, учитывая URL-адрес сообщения.

Я искал через stackoverflow и нашел только метод pos.plusone.get, который получает плюс один, а не доли:

url = "https://plus.google.com/+JohnBattelle/posts/bpxzZb3z5qt"    
mh = { method: "pos.plusones.get", id: "p", params: {nolog: true, id: url, source: "widget", userId: "@viewer", groupId: "@self"}, jsonrpc: "2.0", key: "p", apiVersion: "v1"} 
r = Typhoeus::Request.new("https://clients6.google.com/rpc?key=AIzaSyCKSbrvQasunBoV16zDH9R33D88CeLr9gQ", method: :post, body: mh.to_json, headers: {"Accept" => "application/json", "Content-type" => "application/json" } )

x = r.run
x.body 

Возвращает:

"{\n \"id\": \"p\",\n \"result\": {\n  \"kind\": \"pos#plusones\",\n  \"id\": \"https://plus.google.com/+JohnBattelle/posts/bpxzZb3z5qt\",\n  \"isSetByViewer\": false,\n  \"metadata\": {\n   \"type\": \"URL\",\n   \"globalCounts\": {\n    \"count\": 58.0\n   }\n  },\n  \"abtk\": \"AEIZW7Sct6yKBGo7SA4ZRVvfJerD/H1RhuV/6YxCYfQC6HfEId6oDE8z43pCF4BPmRuxktNaxNSj\"\n }\n}\n" 

Я пытался отправить хеш 'mh' с разными значениями параметра method, но каждый из них возвращает Not Found. Различные значения, которые я пробовал:

pos.plus_shares.get
pos.shares.get
pos.plus_share.get
pos.public.shares.get

Кто-нибудь смог найти способ получить количество акций?


person user_stackoverflow    schedule 18.07.2014    source источник


Ответы (3)


Используемый вами метод является частным/внутренним API Google. Он может измениться без предварительного уведомления и сломать ваш код.

Поддерживаемый метод: activities.get. (Я не очень хорошо знаком с Ruby, поэтому код может быть неправильным.

activitieId = "z13pxxpyyovky5ayk04cibwrzqbdcr3abtc0k"
apiKey = "AIzaSyCKSbrvQasunBoV16zDH9R33D88CeLr9gQ"
r = Typhoeus::Request.new("https://www.googleapis.com/plus/v1/activities/" + activityId + "?key=" + apiKey } )
x = r.run
activity = JSON.parse(x.body)
resharers = activity.object.resharers.totalItems
person abraham    schedule 19.07.2014
comment
stackoverflow .com/questions/13878052/ - person abraham; 21.07.2014
comment
@user_stackoverflow Если вы хотите добавить свое окончательное решение, вы должны сделать это в новом ответе. Редактирование ответов предназначено для устранения очевидных ошибок, ошибок и проблем с форматированием, а не для добавления собственного контента или изменения смысла сообщения. - person knbk; 23.07.2014

Единственный другой способ, которым я узнал до сих пор, - это Nokogiri. Попробовал следующее в консоли rails:

url = "https://plus.google.com/+JohnBattelle/posts/bpxzZb3z5qt"
file = open(url)
doc = Nokogiri::HTML(file)
puts doc.xpath("//div[@jscontroller='tH7URd']").first.children.xpath("//span[@class='MM jI']").first.children

Возвращает:

4

который является правильным общим счетчиком на данный момент.

Но я хотел бы увидеть лучший способ получить этот счет.

person user_stackoverflow    schedule 18.07.2014

Благодаря Аврааму я смог найти окончательное решение на рубине. Вот это для тех, кто пытается получить эти данные:

Во-первых, получите перенаправленный URL-адрес, чтобы решить проблему, связанную с несколькими форматами URL-адресов Google Plus, например. plus.google.com/u/0/+AcccntName/posts/ou2342

def self.get_redirected_url(url)
  url_parse = URI.parse(url)
  http_response = Net::HTTP.start(url_parse.host, url_parse.port, :use_ssl => url_parse.scheme == 'https') {|http| http.request Net::HTTP::Get.new url_parse.request_uri }
  return url if http_response['location'].nil?
  http_response['location']
end

Затем извлеките идентификатор пользователя и путь сообщения из URL-адреса и начните использовать гем GooglePlus, чтобы выполнить работу:

attributes = { plusone_count: 0 , share_count: 0, comment_count: 0 }
redirected_url = URI.parse(get_redirected_url(url))
user_id = redirected_url.request_uri.match(/\+*\w+/).to_s
post_path = redirected_url.request_uri.match(/posts\/\w+/).to_s
person = GooglePlus::Person.get(user_id)
return attributes if person.nil?
cursor = person.list_activities
cursor.each do |item|
  item_url = item.attributes['url']
  if item_url.match(post_path)
    activity_id = item.attributes['id']
    activity = GooglePlus::Activity.get(activity_id)
    attributes[:plusone_count] = activity.attributes['object']['plusoners'['totalItems']
    attributes[:share_count] = activity.attributes['object']['resharers'['totalItems']
    attributes[:comment_count] = activity.attributes['object']['replies'['totalItems']
    break
  end
end
person user_stackoverflow    schedule 22.07.2014