Я делаю запрос, который показывает мне всех пользователей в моем представлении, пользователи могут загружать свои изображения, которые сохранены в таблице, называемой «работает», или они могут иметь свой Instagram, связанный с токеном, который сохраняется в поле ». token_instagram "или если профиль опубликован c, они могут сохранить свое имя пользователя в поле" instagram ", однако некоторые пользователи имеют недопустимые токены или их учетные записи больше не существуют, поэтому их профили отображаются пустыми, когда все они отображаются в списке , Возможно ли при выполнении запроса проверить, если процесс, который получает изображения инстаграм пользователей, не приносит изображения, для сортировки пустых профилей в конце?
это мой запрос:
@users = User.includes(:plan).with_avatar.select("users.*, works.user_id")
@users = @users.joins("left outer join works ON works.user_id=users.id")
@users = @users.distinct
@users = @users.order("CASE WHEN (`order` IS NULL OR `order` = 0) THEN 1 ELSE 0 END, CASE WHEN (`instagram_token` IS NULL AND `instagram` IS NULL AND works.user_id IS NULL) THEN 1 ELSE 0 END, CASE WHEN `order` <= 170 THEN RAND() ELSE `order` END")
@users = @users.paginate(page: page).per_page(18)
По-моему, это то, что я использую для проверки того, что у меня нет связанной работы, или для вывода изображений Instagram
<% if resources %>
<% if token %>
<%
require "open-uri"
photo_count = 5
begin
file = open("https://api.instagram.com/v1/users/self/media/recent/?access_token=#{resources.instagram_token}&count=#{photo_count}")
data = JSON.parse file.read
%>
<ul id="<%=resources.id%>">
<script>
var token = '<%=resources.instagram_token%>',
num_photos = 10,
scrElement = document.createElement( 'script' );
var div = document.createElement("ul");
window.mishaProcessResult<%=resources.id%> = function( data ) {
for( x in data.data ){
document.getElementById( '<%=resources.id%>' ).innerHTML += '<li class="image"><img src="' + data.data[x].images.low_resolution.url + '"></li>';
}
}
scrElement.setAttribute( 'src', 'https://api.instagram.com/v1/users/self/media/recent?access_token=' + token + '&count=' + num_photos + '&callback=mishaProcessResult<%=resources.id%>' );
document.body.appendChild( scrElement );
</script>
</ul>
<% rescue => ex %>
<% if !resources.instagram.nil? %>
<% if resources.instagram.length > 0 %>
<ul id="<%=resources.id%>">
<script>
var name = "<%=resources.instagram.downcase%>";
$.get("https://images"+~~(Math.random()*33)+"-focus-opensocial.googleusercontent.com/gadgets/proxy?container=none&url=https://www.instagram.com/" + name + "/", function(html) {
if (html) {
var regex = /_sharedData = ({.*);<\/script>/m,
json = JSON.parse(regex.exec(html)[1]),
edges = json.entry_data.ProfilePage[0].graphql.user.edge_owner_to_timeline_media.edges;
$.each(edges, function(n, edge) {
var node = edge.node;
document.getElementById( '<%=resources.id%>' ).innerHTML += '<li class="image"><img src="' +node.thumbnail_src+ '"></li>';
});
}
});
</script>
</ul>
<% end %>
<% else %>
<ul>
<li class='image'></li>
</ul>
<% end %>
<% end %>
<% else %>
<ul id="<%=resources.downcase%>">
<script>
var name = "<%=resources.downcase%>";
$.get("https://images"+~~(Math.random()*33)+"-focus-opensocial.googleusercontent.com/gadgets/proxy?container=none&url=https://www.instagram.com/" + name + "/", function(html) {
if (html) {
var regex = /_sharedData = ({.*);<\/script>/m,
json = JSON.parse(regex.exec(html)[1]),
edges = json.entry_data.ProfilePage[0].graphql.user.edge_owner_to_timeline_media.edges;
$.each(edges, function(n, edge) {
var node = edge.node;
document.getElementById( '<%=resources.downcase%>' ).innerHTML += '<li class="image"><img src="' +node.thumbnail_src+ '"></li>';
});
}
});
</script>
</ul>
<% end %>
<% else %>
<ul>
<li class='image'></li>
</ul>
<% end %>