在没有 "Instagram Graph Api" 的情况下获取 instagram 完整个人资料信息

Get instagram full profile information without "Instagram Graph Api"

我想从 Instagram 用户那里获取一些数据。

所以我使用了 Instagram Basic Display Api,我可以收到的配置文件数据是这些:

但我想要这些数据:

我不知道如果没有 Instagram Graph API(以任何方式)在 c# 中如何获得这些数据?

或者有什么方法可以使用 WebClient class 或类似的方法获取这些数据?

@Eehab 回答的更新: 我在这个例子中使用了 RestClientWebClient,它们都给出了相同的结果。

现在看WebClient例子:

WebClient client = new WebClient();
string page = client.DownloadString("https://www.instagram.com/instagram/?__a=1");
Console.WriteLine(page);
Console.ReadKey();

并查看此代码的图像 here

现在看看上面代码的结果here

我还知道,这个 link 是登录用户的唯一访问权限,我已经在 chrome 登录了我的 Instagram 帐户,但我认为 WebClient 也需要登录。

通过@Eehab 回答编辑:

在这种情况下使用此 Url(https://www.instagram.com/{username}/?__a=1),如果没有 Instagram 登录浏览器配置文件,我们将无法使用。因此,我们应该使用 selenium 登录 Instagram,并使用登录的 cookie 将其用于 Url 请求。所以首先安装 selenium 网络驱动程序然后编写以下代码(未经测试):

var driver = new ChromeDriver();

//go to Instagram
driver.Url = "https://www.instagram.com/";

//Log in
var userNameElement = _driver.FindElement(By.Name("username"));
userNameElement.SendKeys("Username");
var passwordElement = _driver.FindElement(By.Name("password"));
passwordElement.SendKeys(Cars[0].auth.pass);
var loginButton = _driver.FindElement(By.Id("login"));
loginButton.Click();

//Get cookies
var cookies = driver.Manage().Cookies.AllCookies.ToList();

//Send request with given cookies :)
var url = "https://www.instagram.com/{username}/?__a=1";
var httpRequest = (HttpWebRequest)WebRequest.Create(url);
foreach(var cookie in cookies){
   httpRequest.Headers["Cookie"] += $"{cookie.Name}={cookie.Value}; ";
}
var httpResponse = (HttpWebResponse)httpRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
   var result = streamReader.ReadToEnd();
}
//...

如果有人可以改进这个问题以获得更多用途可以编辑,我真的很感激:)

您可以使用开放 API 来做到这一点,例如:

https://www.instagram.com/instagram/?__a=1

来自邮递员代码的示例代码:

var client = new RestClient("https://www.instagram.com/instagram/?__a=1");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);

您也可以使用 HttpClient class,如果您想使用 WebClient,您可以使用 WebClient.DownloadString 方法虽然我不建议使用 WebClient 进行此抓取,但请记住,如果 Instagram 阻止了你,可能会阻止你,你需要住宅代理来绕过阻止。

响应将是 json data ,使用 Json.Net 或类似的库对其进行反序列化。

只需在给定 url 中将 instagram 替换为您想要的任何用户名即可。