javascript - Jak získat všechny veřejné příspěvky uživatele na Instagramu, bez použití Instagram API
Snažil jsem se získat příspěvky z účtu veřejného uživatele na Instagramu, vyzkoušel jsem téměř každou možnou metodu, ale všechny vrací chybu 403 (přístup odepřen).
https://www.instagram.com/graphql/query/?query_hash=ded47faa9a1aaded10161a2ff32abb6b&variables={"tag_name":"{user-name}","first":25,"after":""}
https://www.instagram.com/{user-name}/?__a=1
https://www.instagram.com/{user-name}/media
$.ajax({
url: URL,
type: "GET",
success: function(data) {
console.log('Success!' ,data);
},
error: function (response) {
console.log('ERROR!', response);
}
});
Výše jsou odkazy, ze kterých jsem se snažil získat data. Jak jsem četl, Instagram mění své protokoly, existuje nějaký zbývající způsob, jak získat seznam příspěvků od jakéhokoli veřejného uživatele, aniž bych používal Instagram API a aniž bych používal backendový kód?
Děkuji
Odpověď č. 1
Vaše druhé řešení by mělo fungovat. Zkuste přistoupit na tuto URL:
https://www.instagram.com/{username}/?__a=1
Obsahuje veškeré informace o uživateli, které jsou dostupné na jeho stránce, včetně 12 nejnovějších příspěvků, v různých velikostech. Jako vedlejší poznámka neobsahuje seznamy sledujících ani seznamy sledujících uživatele.
Vytvořil jsem jQuery plugin, který používá tuto metodu:
https://github.com/kasperlegarth/instastory.js
Odpověď č. 2
Řešení v PHP
Můžete to někde přidat, stáhne to 12 nejnovějších příspěvků od uživatele a vrátí odkazy na fotky v poli. Zde je implementace
function getPosts($profile) {
$base = "https://instagram.com/";
$end = "/?__a=1";
$ls = array();
$content = file_get_contents($base.$profile.$end);
if (strpos($content, "is_private\":false") !== false) {
return array(true, array());
}
$split = "config_height\":320},{\"src\":\"";
while (strpos($content, $split) !== false) {
$part = @explode($split, $content, 2)[1];
$p = @explode("\"", $part, 2)[0];
$content = str_replace($split.$p, "", $content);
array_push($ls, $p);
}
return array(false, $ls);
}
$x = getPosts("najemi.cz");
$isPrivate = $x[0];
$posts = $x[1]
if ($isPrivate) {
echo "Sorry, this account is private";
}else{
foreach($posts as $post) {
echo "<img src=\"$post\">";
}
}
Toto by se používalo v HTML k zobrazení 12 nejnovějších příspěvků účtu. Můžete si to přizpůsobit podle svých potřeb přidáváním nebo odstraňováním věcí, které se zobrazují, ale kromě toho lze funkci volat s jakýmkoli existujícím uživatelským jménem.
Řešení pro JavaScript s využitím AJAXu
Toto řešení by vyžadovalo přístup k souboru PHP, který by vracel výsledky
Javascript by byl následující
function display(array1) {
array1.forEach(element => console.log(element));
}
var username = "najemi.cz";
$.ajax({
url: "./getPosts.php?p=" + username,
type: "GET",
success: function(data) {
display(data.split("\n"));
},
error: function (response) {
console.log('ERROR!', response);
}
});
Soubor php s názvem „getPosts.php“ by obsahoval:
<?php
function getPosts($profile) {
$base = "https://instagram.com/";
$end = "/?__a=1";
$ls = array();
$content = file_get_contents($base.$profile.$end);
if (strpos($content, "is_private\":false") !== false) {
return array(true, array());
}
$split = "config_height\":320},{\"src\":\"";
while (strpos($content, $split) !== false) {
$part = @explode($split, $content, 2)[1];
$p = @explode("\"", $part, 2)[0];
$content = str_replace($split.$p, "", $content);
array_push($ls, $p);
}
return array(false, $ls);
}
if(isset($_GET['p'])){$p = $_GET['p'];}
$x = getPosts($p);
$isPrivate = $x[0];
$posts = $x[1]
if ($isPrivate) {
echo "Sorry, this account is private";
}else{
foreach($posts as $post) {
echo "$post\n";
}
}
?>
