web-dev-qa-db-fra.com

Téléchargement de photos sur Instagram via votre propre application iOS

Instagram a récemment modifié sa politique relative aux API afin de permettre aux développeurs de publier des images sur la plateforme Instagram via leur propre application. Plusieurs autres techniques ont déjà été utilisées pour cela. L'une d'entre elles consistait à invoquer l'application Instagram, qui ouvrirait essentiellement Instagram et en ferait le partage à partir de là. Vous pouvez voir un tutoriel sur la façon dont cela peut être fait: Comment partager une image sur Instagram depuis votre propre application iOS

Cependant, il existe plusieurs applications qui permettent le partage direct sur la plate-forme Instagram sans invoquer l'application Instagram. Oggl de Hipstamatic permet le partage direct sur Instagram sans invoquer Instagram. Ci-dessous, j'ai posté des captures d'écran du processus.

Une fois ma photo prise, Oggl m'a donné plusieurs autres réseaux sociaux sur lesquels je pouvais partager ma photo. J'ai sélectionné Facebook et Instagram.

enter image description here

Après avoir sélectionné Instagram, Safari a été ouvert et m'a amené aux deux pages suivantes pour autoriser Oggl à publier sur Instagram. Je suis entré dans mes informations d'identification Instagram, puis cela m'a amené à la page d'autorisation.

enter image description hereenter image description here

Une fois que j'ai autorisé Oggl, j'ai pu télécharger sur Instagram et en quelques secondes, j'ai vu la photo sur mon fil d'actualités Instagram. Ce type de partage est très analogue au partage sur Facebook et Twitter. Il a le même concept. Comment peut-on s'y prendre? Comment peut-on reproduire ce processus exact dans leur application? Les photos prises dans mon application sont 612px par 612 px, elles sont donc compatibles avec les dimensions des photos prises sur Instagram. J'ai déjà implémenté le partage sur Facebook et Twitter, mais j'aimerais implémenter le téléchargement sur Instagram comme le faisait Oggl. Est-ce possible?

Il existe de nombreux développeurs iOS qui peuvent bénéficier d'une réponse canonique détaillée à cette question. 

Je vous remercie

28
noahandthewhale

Hipstamatic est l'une des rares applications à disposer d'un accès en écriture via l'API d'Instagram.

Instagram n'a pas d'API publique pour poster des photos, il vous permet d'obtenir leurs données mais pas d'écrire les vôtres.

Hipstamatic et plusieurs autres applications ont négocié des accords spéciaux avec Instagram qui leur permettent d’utiliser l’API d’écriture et de publier des photos directement.

Pour tous les autres développeurs, vous devez utiliser les points d'ancrage iOS pour partager sur Instagram en basculant vers leur application.

Autant que je sache, il n'est pas facile de faire appel à Instagram pour vous permettre d'accéder en écriture. Vous devez disposer d'une application de qualité avec un contenu de haute qualité et sympathique avec les bonnes personnes :)

25
Rowan

Vous ne pouvez pas publier directement une image sur Instagram. Vous devez rediriger votre image avec UIDocumentInteractionController. Utilisez le code ci-dessous, espérons que cela vous aidera

@property (nonatomic, retain) UIDocumentInteractionController *dic;    

CGRect rect = CGRectMake(0 ,0 , 0, 0);

UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, self.view.opaque, 0.0);

[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];

UIGraphicsEndImageContext();

NSString  *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/test.igo"];

NSURL *igImageHookFile = [[NSURL alloc] initWithString:[[NSString alloc] initWithFormat:@"file://%@", jpgPath]];

self.dic.UTI = @"com.instagram.photo";

self.dic = [self setupControllerWithURL:igImageHookFile usingDelegate:self];

self.dic=[UIDocumentInteractionController interactionControllerWithURL:igImageHookFile];

[self.dic presentOpenInMenuFromRect: rect    inView: self.view animated: YES ];


-(UIDocumentInteractionController *) setupControllerWithURL: (NSURL*) fileURL usingDelegate: (id <UIDocumentInteractionControllerDelegate>) interactionDelegate {

     UIDocumentInteractionController *interactionController = [UIDocumentInteractionController interactionControllerWithURL: fileURL];
     interactionController.delegate = interactionDelegate;
     return interactionController;
}
9
Faran Ghani

si vous souhaitez simplement envoyer l'image sans découpage, vous devez définir une taille d'image de 640 x 640 ou le blocage de l'application. 

C'est mon code Swift

 var instagramURL = NSURL(string: "instagram://app")!
        if UIApplication.sharedApplication().canOpenURL(instagramURL) {
            var documentDirectory = NSHomeDirectory().stringByAppendingPathComponent("Documents")
            var saveImagePath = documentDirectory.stringByAppendingPathComponent("Image.igo")
            var imageData = UIImagePNGRepresentation(self.bestScoreShareView.takeSnapshot(W: 640, H: 640))
            imageData.writeToFile(saveImagePath, atomically: true)
            var imageURL = NSURL.fileURLWithPath(saveImagePath)!
           docController  = UIDocumentInteractionController()
            docController.delegate = self
            docController.UTI = "com.instagram.exclusivegram"
            docController.URL = imageURL
            docController.presentOpenInMenuFromRect(CGRectZero, inView: self.view, animated: true)

        } else {
            println("instagram not found")
        }

extension pour prendre shapshot de uiview

extension UIView {
    func takeSnapshot(#W: CGFloat, H: CGFloat) -> UIImage {
        var cropRect = CGRectMake(0, 0, 600, 600)
        UIGraphicsBeginImageContextWithOptions(bounds.size, false, UIScreen.mainScreen().scale)
        drawViewHierarchyInRect(self.bounds, afterScreenUpdates: true)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        image.imageWithNewSize(CGSizeMake(W, H))
        return image
    }
}

extension pour définir la taille de l'image

extension UIImage {
     func imageWithNewSize(newSize:CGSize) ->UIImage {
        UIGraphicsBeginImageContext(newSize)
        self.drawInRect(CGRectMake(0, 0, newSize.width, newSize.height))

        let newImage = UIGraphicsGetImageFromCurrentImageContext();

        UIGraphicsEndImageContext();
        return newImage
    }
}
4
Beslan Tularov

textuellement de la documentation de l'API Instagram:

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

Actuellement, le téléchargement via l’API n’est pas possible. Nous avons délibérément choisi de ne pas ajouter cela pour les raisons suivantes:

  1. Instagram concerne votre vie active - nous espérons encourager les photos depuis l'application.
  2. Nous voulons lutter contre le spam et les photos de mauvaise qualité. Une fois que nous autorisons le téléchargement à partir d'autres sources, il est plus difficile de contrôler ce qui entre dans l'écosystème Instagram. Cela étant dit, nous travaillons sur des moyens de garantir aux utilisateurs une expérience cohérente et de grande qualité sur notre plate-forme.
4
NiloVelez

Ce que vous essayez de faire est mis en œuvre via l’API Instagram http://instagram.com/developer/ . Vous pouvez également utiliser l'application Instagram pour effectuer des actions similaires. Celles-ci sont documentées sous Crochets iPhone . Si vous utilisez Ruby Motion, vous pourrez utiliser le framework officiel . Malheureusement, il n'y a pas d'API Objective-C iOS officiellement prise en charge, mais certaines alternatives open source sont disponibles, comme le NRGramKit .

La manière exacte de mettre en œuvre l'interaction avec l'API Instagram va au-delà d'une réponse Stack Overflow, mais les liens ci-dessus devraient vous donner un bon point de départ si vous connaissez bien la programmation iOS. 

4
allprog

Vous pouvez également consulter la section "Interaction entre documents" de la documentation de l'API d'Instagram pour iPhone Hooks . Cela pourrait être exploité pour faire ce que vous essayez de faire et ce pourrait être la façon dont Oggl le fait.

1
omdel

J'ai utilisé le code ci-dessous pour partager des photos sur Instagram.

    NSURL *instagramURL = [NSURL URLWithString:@"instagram://app"];
    if([[UIApplication sharedApplication] canOpenURL:instagramURL]) //check for App is install or not
    {
        NSData *imageData = UIImagePNGRepresentation(image); //convert image into .png format.
        NSFileManager *fileManager = [NSFileManager defaultManager];//create instance of NSFileManager
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); //create an array and store result of our search for the documents directory in it
        NSString *documentsDirectory = [paths objectAtIndex:0]; //create NSString object, that holds our exact path to the documents directory
        NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"insta.igo"]]; //add our image to the path
        [fileManager createFileAtPath:fullPath contents:imageData attributes:nil]; //finally save the path (image)
        NSLog(@"image saved");
        
        CGRect rect = CGRectMake(0 ,0 , 0, 0);
        UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, self.view.opaque, 0.0);
        [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
        UIGraphicsEndImageContext();
        NSString *fileNameToSave = [NSString stringWithFormat:@"Documents/insta.igo"];
        NSString  *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:fileNameToSave];
        NSLog(@"jpg path %@",jpgPath);
        NSString *newJpgPath = [NSString stringWithFormat:@"file://%@",jpgPath];
        NSLog(@"with File path %@",newJpgPath);
        NSURL *igImageHookFile = [[NSURL alloc]initFileURLWithPath:newJpgPath];
        NSLog(@"url Path %@",igImageHookFile);
        
        self.documentController.UTI = @"com.instagram.exclusivegram";
       // self.documentController = [self setupControllerWithURL:igImageHookFile usingDelegate:self];
        
    
        self.documentController=[UIDocumentInteractionController interactionControllerWithURL:igImageHookFile];
        NSString *caption = @"#Your Text"; //settext as Default Caption
        self.documentController.annotation=[NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@"%@",caption],@"InstagramCaption", nil];
        [self.documentController presentOpenInMenuFromRect:rect inView: self.view animated:YES];
    }
    else
    {
        UIAlertView *errMsg = [[UIAlertView alloc] initWithTitle:@"Warning" message:@"No Instagram Available" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
        [errMsg show];
    }
    

0
Nirzar Gandhi