Продолжаем исследование актуальной версии API HeadHunter, начатое в материале API HeadHunter: скрипт для обновления резюме (php), и продолженное статьей HeadHunter resume updater on Ruby on Rails, иллюстрирующей процесс написания Ruby-on-Rails приложения. Попробуем оттолкнуться от кода, описанного на форуме в топике HeadHunter negotiations on Rails, дописав его таким образом, чтобы получить - в виде удобных для просмотра HTML-таблиц - не только перечень ваших откликов на вакансии вкупе с реакцией на них работодателей, но и краткую историю просмотров резюме, что порой способно быть весьма удобной для соискателя фичей.
Update 04.04.2022. Все, кто хотел бы, используя описанную логику кода или любую иную, поэкспериментировать с API HeadHunter, примите добрый совет: не пробуйте этого делать на праздниках и уикендах, в такие дни API HeadHunter, случается, или лежит, или возвращает голимую херню вместо обусловленного докой JSON. На прошедших выходных имел случай в *дцатый раз убедиться в справедливости данного тезиса; подробно не анализировал, ибо не вижу в данном случае ни малейшего смысла терять свое время. А внешняя фабула такова: ранним утречком в понедельник, часиков эдак в 11 или 12, появляются, видимо, на работе гениальные российские прогеры/девопсы HeadHunter и поднимают свой API, т.е. плюс-минус к полудню все начинает, как ни в чем ни бывало, работать. Обращаться в саппорт с этим бесполезно, последует обычное русское #ихтамнет и #авотнедокажете, посему просто примите к сведению сказанное: ну вот так люди здесь живут и работают, иначе не умеют, въелось у них в плоть и кровь... подробно развивать данный тезис в контексте происходящих невеселых событий в данный момент не стану, по вполне понятным причинам, но вы меня поняли.
За более-менее подробными комментариями позвольте адресовать вас к уже упомянутым материалам блога и форума; здесь же публикую уже готовый код rails-приложения, представляющий из себя хотя и базовый, но, тем не менее, полностью работоспособный концепт, который совершенно нет нужды стесняться дорабатывать, хакать и форкать:
logics
def index
if params[:code].present?
id_hh = ENV['ID_HH_CORR'] #'*******************'
secret_hh = ENV['SECRET_HH_CORR'] #'*******************'
response = Typhoeus::Request.post('https://hh.ru/oauth/token',
params: { :grant_type => "authorization_code",
:client_id => id_hh,
:client_secret => secret_hh,
:code => params[:code]
}
)
hash = JSON.parse(response.body)
response = Typhoeus::Request.get('https://api.hh.ru/negotiations/active?pages=1&per_page=15',
method: :get,
headers: { Authorization: "Bearer #{hash['access_token']}" }
)
@response = JSON.parse(response.body)
response = Typhoeus::Request.get('https://api.hh.ru/resumes/mine',
method: :get,
headers: { Authorization: "Bearer #{hash['access_token']}" }
)
response = JSON.parse(response.body)
@response1 = []
response['items'].each do |item|
response = Typhoeus::Request.get('https://api.hh.ru/resumes/' + item['id'] + '/views?pages=1&per_page=5',
method: :get,
headers: { Authorization: "Bearer #{hash['access_token']}" }
)
@response1 << JSON.parse(response.body)
end
end
end
view
<% if params[:code].nil? %>
<%= link_to 'Получить перечень откликов и просмотров резюме', 'https://hh.ru/oauth/authorize?response_type=code&client_id=' + ENV['ID_HH_CORR'] %>
<% else %>
<h3>Отклики на резюме</h3>
<table class="HHCorrTable">
<thead>
<tr>
<th>Company name</th>
<th>Vacancy</th>
<th>Id</th>
<th>Read</th>
<th>Archived</th>
<th>Address</th>
<th>Created at</th>
<th>Updated at</th>
</tr>
</thead>
<tbody>
<% @response['items'].each do |item| %>
<tr>
<td><%= item['vacancy']['employer']['name'] %></td>
<td><%= item['vacancy']['name'] %></td>
<td><%= item['state']['name'] %></td>
<td><%= item['read'] %></td>
<td><%= item['vacancy']['archived'] %></td>
<td><%= item['vacancy']['address'] %></td>
<td><%= item['created_at'] %></td>
<td><%= item['updated_at'] %></td>
</tr>
<% end %>
</tbody>
</table>
<h3>Просмотры резюме</h3>
<table class="HHCorrTable">
<thead>
<tr>
<th>Date</th>
<th>Сompany name</th>
<th>Logo</th>
</tr>
</thead>
<tbody>
<% @response1.each do |item| %>
<% item['items'].each do |a| %>
<tr>
<td><%= a['created_at'] %></td>
<td><a href="/<%= a['employer']['alternate_url'] %>" target="_blank" ><%= a['employer']['name'] %></a></td>
<td><img src="/<%= a['employer']['logo_urls']['90'] %>" /></td>
</tr>
<% end %>
<% end %>
</tbody>
</table>
<% end %>