如何使用 instagram API 从个人资料用户 URL 加载 instagram 个人资料图片?

Posted

技术标签:

【中文标题】如何使用 instagram API 从个人资料用户 URL 加载 instagram 个人资料图片?【英文标题】:How can i use instagram API to load instagram profile picture from profile user URL? 【发布时间】:2017-08-04 18:43:59 【问题描述】:

我尝试显示来自 url 的图像,到目前为止我已经成功,但是当我尝试从用户的 url 加载 instagram 个人资料图片时它不起作用。 我想知道如何使用 instagram API 获取用户的图片并使用 picasso 将其加载到 imageview 中。

【问题讨论】:

您能补充更多细节吗?您使用什么语言? android studio @AndrewMyers 上使用 java 【参考方案1】:

实际上,我正在使用一种不需要访问令牌的方法,您唯一需要的是用户名。下面我把代码留给你

第 1 步:MainActivity.java

    将此代码添加到您的主活动中,创建一个名为 getHDProfilePicFromUsername 的字符串函数和另一个名为 getBetweenStrings 的函数,这些函数应如下所示:

首先获取HDProfilePicFromUrl

    ///This function will return to you the url of the user profile picture
    private String getHDProfilePicFromUrl(String url) throws ExecutionException, InterruptedException, JSONException 

        JSONObject jObject;
        String parsingUsername,username;
            if(url.contains("?"))
            
                parsingUsername = url.substring(0,url.lastIndexOf("?"))+"/";
            
            else
                parsingUsername = url;
            
            username = getBetweenStrings(parsingUsername,".com/","/");
        String profileInfo = new getDataFromUrl(this).execute("https://www.instagram.com/"+username+"/?__a=1").get();

        jObject= new JSONObject(profileInfo);
        jObject  = jObject.getJSONObject("graphql");
        jObject  = jObject.getJSONObject("user");
        String response  = jObject.getString("profile_pic_url_hd");
        return response;     

第二次getBetweenStrings

private String getBetweenStrings( String text, String textFrom, String textTo) 
String result = "";
result = text.substring( text.indexOf(textFrom) + textFrom.length(), text.length());
result =  result.substring(0,result.indexOf(textTo));
return result;

    然后在 Activity 中创建一个名为 getDataFromUrl 的内部类,该类应如下所示:

    private class getDataFromUrl extends AsyncTask<String, Void, String> 
        Context mContext;
        public getDataFromUrl(Context mContext) 
            this.mContext = mContext;
        
        @Override
        protected void onPreExecute() 
            super.onPreExecute();
    
        
    
        @Override
        protected String doInBackground(String... arg0) 
            HttpHandler sh = new HttpHandler();
    
            // Making a request to url and getting response
            String jsonStr = sh.makeServiceCall(arg0[0]);
    
            Log.e(TAG, "Response from url: " + jsonStr);
    
            if (jsonStr != null) 
                return jsonStr;
             else 
                Log.e(TAG, "Couldn't get json from server.");
                return null;
            
        
    
        @Override
        protected void onPostExecute(String s) 
            super.onPostExecute(s);
            String url = s.replace('|',',').split(",")[1];
            Log.d(TAG, "Link: " + url);
        
    
    

现在您可以获取用户个人资料图片 URL,作为奖励,我将向您提供使用该 URL 的代码并将图片放入 ImageView。

第 2 步:main_activity.xml

    添加一个图像视图,ImageView,可以自定义,但我建议 1:1 比例以保持图像质量。您的 xml 应如下所示:

    <ImageView
        android:id="@+id/imgProfilePic"
        android:scaleType="fitXY"
        android:src="@drawable/ic_image_black_24dp"
        android:layout_
        android:layout_/>
    
    </RelativeLayout>
    

第 3 步:下载ImageTask.java

现在您需要创建一个名为 DownloadImageTask 的外部类,完整的代码必须是这样的:

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.ImageView;

import java.io.InputStream;

public class DownloadImageTask extends AsyncTask<String, Void, Bitmap> 
    ImageView bmImage;

    public DownloadImageTask(ImageView bmImage) 
        this.bmImage = bmImage;
    

    protected Bitmap doInBackground(String... urls) 
        String urldisplay = urls[0];
        Bitmap mIcon11 = null;
        try 
            InputStream in = new java.net.URL(urldisplay).openStream();
            mIcon11 = BitmapFactory.decodeStream(in);
         catch (Exception e) 
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        
        return mIcon11;
    

    protected void onPostExecute(Bitmap result) 
        bmImage.setImageBitmap(result);
    

第 4 步:MainActivity.java

现在最后一步是添加您的 Main Activity 加载 ImageView 的代码,此代码将在 MainActivity.java 内的 OnCreate void 中

String url="https://www.instagram.com/juanjshb/";
ImageView = thumbnails = (ImageView)findItemById(R.id.imgProfilePic);
new DownloadImageTask(thumbnails).execute(getHDProfilePicFromUrl(url));

就是这样,希望对我有帮助 我有 2 年的时间使用此代码希望它有所帮助。

【讨论】:

以上是关于如何使用 instagram API 从个人资料用户 URL 加载 instagram 个人资料图片?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Instagram API 获取用户名?

如何使用他们的 API 显示 Instagram 个人资料图片

如何通过 API 获取 Instagram 头像? [关闭]

从科尔多瓦应用程序在 Instagram 上分享图像到用户个人资料

Instagram Graph API - 当用户从个人账户切换到企业账户时获取媒体洞察指标

如何使用新的 Instagram Graph 或 Basic Display API 获取普通用户的个人资料图片(截至 2020 年 6 月 29 日)