Instagram photo to UIImageView

≡放荡痞女 提交于 2019-12-12 02:19:58

问题


can i show an instagram photo on my UIImageView?

I was looking for media id and other options, but i can't find the format and the way to show this image for example:

https://www.instagram.com/p/9W-K0wtq3v/

回答1:


I think: it will have two ways to achieve your goal

*First: parse link web Instagram. If you view source your link give: you will find direct link to image:

https://igcdn-photos-b-a.akamaihd.net/hphotos-ak-xfp1/t51.2885-15/e35/10729433_781480525295113_239273684_n.jpg

So you can parse web and find:

<meta property="og:image" content="

for direct link.

  • Second: You can reference here:

    https://instagram.com/developer/endpoints/media/

You enroll developer instagram and learn how to use Instagram API end points.




回答2:


You can get direct link to image using http://api.instagram.com/oembed?url= . After that, downloading the image from that URL & displaying it in UIImageView is fairly simple. I have edited my answer to this one as it works without integrating Instagram API or parsing the web page for URL to file.

Add the following to methods to your View Controller. I have added explanation in comments.

- (void)getDirectURLToLink:(NSString *)urlStr completionBlock:(void (^)(BOOL succeeded, NSString *imageLink))completionBlock
{
    NSURL *url = [NSURL URLWithString:urlStr];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [NSURLConnection sendAsynchronousRequest:request
                                       queue:[NSOperationQueue mainQueue]
                           completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
                               if ( !error )
                               {
                                   //Convert data to dictionary as it is JSON. You can view json response for your url at http://paste.ubuntu.com/14437288/
                                    NSError *error1;
                                   NSMutableDictionary * innerJson = [NSJSONSerialization
                                                                      JSONObjectWithData:data options:kNilOptions error:&error1
                                                                      ];
                                   //Send the direct url to block
                                   completionBlock(YES,[innerJson objectForKey:@"thumbnail_url"]);
                               } else{
                                   //request failed
                                   completionBlock(NO,nil);
                               }
                           }];
}

- (void)downloadImageWithURL:(NSString *)urlStr completionBlock:(void (^)(BOOL succeeded, UIImage *image))completionBlock
{
    NSURL *url = [NSURL URLWithString:urlStr];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [NSURLConnection sendAsynchronousRequest:request
                                       queue:[NSOperationQueue mainQueue]
                           completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
                               if ( !error )
                               {
                                   //cnvert data to uiimage
                                   UIImage *image = [[UIImage alloc] initWithData:data];
                                   completionBlock(YES,image);
                               } else{
                                   //download failed
                                   completionBlock(NO,nil);
                               }
                           }];
}

(But since sendAsynchronusRequest is deprecated in iOS 9.0, you should use [NSURLSession dataTaskWithURL])

Now you have set up the web request part of the file. To utilize these services, Add following method to your Viewcontroller:

-(void) getImageForPostURL: (NSString *)postURL
{
    NSString *baseURL = @"http://api.instagram.com/oembed?url=";

    NSString *directLinkRequestURL = [NSString stringWithFormat:@"%@%@",baseURL,postURL];
    //Request Direct URL to file from your post url
    [self getDirectURLToLink:directLinkRequestURL completionBlock:^(BOOL succeeded, NSString *imgDirectURL) {
        if (succeeded) {
            //Direct link retrieved
            //Get image
            [self downloadImageWithURL:imgDirectURL completionBlock:^(BOOL succeeded, UIImage *image) {
                if (succeeded) {
                    // change the image where you want, it has been downloaded
                    _imgView.image = image;

                }

            }];

        }
        else
        {
           //Error
            //Link could not be retrieved

        }


    }];

}

All this work is not for vain. Now, You are all set to go. All you need is a URL to instagram post and you will be able to download your image just by calling this one line:

[self getImageForPostURL:@"https://www.instagram.com/p/9W-K0wtq3v/"]; //Give your post url as parameter here


来源:https://stackoverflow.com/questions/33728793/instagram-photo-to-uiimageview

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!