【问题标题】:how to get instagram profile picture如何获取 Instagram 个人资料图片
【发布时间】:2017-01-05 21:18:33
【问题描述】:

在我的应用程序中使用想要将 instagram 个人资料图片放入他的帐户中

如何以编程方式从 Instagram 获取用户的个人资料图片

如:

【问题讨论】:

    标签: android android-studio image-processing instagram instagram-api


    【解决方案1】:

    使用 Instagram API 用户端点 (https://api.instagram.com/v1/users/{user-id}/?access_token=ACCESS-TOKEN ) 你会收到这样的回复:

    {
        "data": {
            "id": "1574083",
            "username": "snoopdogg",
            "full_name": "Snoop Dogg",
            "profile_picture": "http://distillery.s3.amazonaws.com/profiles/profile_1574083_75sq_1295469061.jpg",
            "bio": "This is my bio",
            "website": "http://snoopdogg.com",
            "counts": {
                "media": 1320,
                "follows": 420,
                "followed_by": 3410
            }
    }
    

    然后您可以获取profile_picture 并使用Facebook Fresco 之类的方式下载它,然后它将为您显示图像。

    【讨论】:

    • 访问令牌将是您通过 Instagram API 颁发的令牌。有很多关于它们是什么的资源,您可以从他们的developer resources 找到有关 Instagram 如何授予令牌的信息。
    • 我在 instagram 开发者网站上注册并获得 CLIENT ID not access token
    • 您使用客户端 ID 生成访问令牌。我提供的开发者资源链接告诉了如何实现这一点。
    • 请提供示例或视频
    • 您可以通过在 Google 上搜索找到示例,如果您对如何创建访问令牌还有其他问题,我建议您再问一个问题,因为这现在超出了您原始答案的范围。跨度>
    【解决方案2】:

    如果您真的希望用户从您的应用中发布 instagram 个人资料图片,那么您不能,instagram 没有提供用于发布照片的 post 方法,但是是的,您可以按照哈士奇的回答查看和下载。

    【讨论】:

    • 正如我所说,否则他的回答应该这样做。我看到您的问题出在访问令牌上。检查此链接以了解如何获取它。 [instagram.com/developer/authentication/]
    • 现在我获得了访问令牌,但如何获得个人资料照片
    【解决方案3】:

    按照这些步骤在您的应用中获取个人资料图片

    1. 使用用户名向以下链接发出请求并接收JSON 数据。 https://apinsta.herokuapp.com/u/USERNAME

    2. 现在从数据中解析用户的id

    3. 现在使用ID 访问此链接 https://i.instagram.com/api/v1/users/ID_HERE/info/

    4. 现在在 hd_profile_pic_url_info 对象中解析 url 键。

    5. 使用Glide将图像加载到ImageView

    编码愉快!

    感谢 Chrisby 的服务器。 https://stackoverflow.com/a/49862390/9565955

    【讨论】:

      【解决方案4】:

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

      第 1 步:MainActivity.java

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

        ///This function will return to you the url of the user profile picture
         private String getHDProfilePicFromUsername(String username) throws ExecutionException, InterruptedException, JSONException {
             JSONObject jObject;
             String profileInfo = new getDataFromUrl(MainActivity.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;
            }   
        
      2. 然后在 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

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

        <ImageView
            android:id="@+id/imgProfilePic"
            android:scaleType="fitXY"
            android:src="@drawable/ic_image_black_24dp"
            android:layout_width="300dp"
            android:layout_height="300dp"/>
        
        </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 中

      ImageView = thumbnails = (ImageView)findItemById(R.id.imgProfilePic);
      new DownloadImageTask(thumbnails).execute(getHDProfilePicFromUsername("jusnjshb"));
      

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

      【讨论】:

        猜你喜欢
        • 2015-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多