
Instagram API privée Swift
Veuillez noter que SwiftyInsta n'est plus activement maintenu.
Reportez-vous à #244 pour plus d'informations.
Consultez Swiftagram si vous recherchez des alternatives à jour.
Instagram propose deux types d'API aux développeurs. L'API Platform Instagram (extrêmement limitée en fonctionnalités et sur le point d'être abandonnée), et l'API Graph Instagram réservée aux comptes Business et Creator.
Cependant, les applications Instagram reposent sur un troisième type d'API, appelée API privée ou API non officielle, et SwiftyInsta est un client iOS, macOS, tvOS et watchOS pour celles-ci, entièrement écrit en Swift. Vous pouvez essayer de créer une meilleure expérience Instagram pour vos utilisateurs, ou écrire des bots pour automatiser différentes tâches.
Ces API privées ne nécessitent ni token ni enregistrement d'application mais elles ne sont pas autorisées par Instagram pour une utilisation externe. Utilisez-le à vos risques et périls.
File/Swift Packages/Add Package Dependency… dans le menu.https://github.com/TheM4hd1/SwiftyInsta.git.CocoaPods est un gestionnaire de dépendances pour les projets Cocoa. Vous pouvez l'installer avec la commande suivante :
$ gem install cocoapods
Pour intégrer SwiftyInsta dans votre projet Xcode avec CocoaPods, spécifiez-le dans votre Podfile :
use_frameworks!
target '<Your Target Name>' do
pod 'SwiftyInsta', '~> 2.0'
end
Ensuite, exécutez la commande suivante :
$ pod install
SwiftyInsta dépend de CryptoSwift et de keychain-swift.
Credentials// celles-ci doivent être des références fortes.
self.credentials = Credentials(username: /* username */, password: /* password */, verifyBy: .text)
self.handler = APIHandler()
handler.authenticate(with: .user(credentials)) {
switch $0 {
case .success(let response, _):
print("Login successful.")
// persistez le cache en toute sécurité dans le trousseau pour vous reconnecter plus tard.
guard let key = response.persist() else { return print("`Authentication.Response` could not be persisted.") }
// stockez la `key` où vous voulez, afin de pouvoir accéder à `Authentication.Response` plus tard.
// `UserDefaults` n'est qu'un exemple.
UserDefaults.standard.set(key, forKey: "current.account")
UserDefaults.standard.synchronize()
case .failure(let error):
if error.requiresInstagramCode {
/* mettez à jour l'interface pour demander le code */
} else {
/* notifiez l'utilisateur */
}
}
}
Une fois que l'utilisateur a saisi le code d'authentification à deux facteurs ou le code de défi, il vous suffit de faire
self.credentials.code = /* the code */
Et le completionHandler dans le précédent authenticate(with: completionHandler:) attrapera automatiquement la réponse.
LoginWebViewControllerlet login = LoginWebViewController { controller, result in
controller.dismiss(animated: true, completion: nil)
// gérez la réponse d'authentification.
guard let (response, _) = try? result.get() else { return print("Login failed.") }
print("Login successful.")
// persistez le cache en toute sécurité dans le trousseau pour vous reconnecter plus tard.
guard let key = response.persist() else { return print("`Authentication.Response` could not be persisted.") }
// stockez la `key` où vous voulez, afin de pouvoir accéder à `Authentication.Response` plus tard.
// `UserDefaults` n'est qu'un exemple.
UserDefaults.standard.set(key, forKey: "current.account")
UserDefaults.standard.synchronize()
}
if #available(iOS 13, *) {
present(login, animated: true, completion: nil) // faites simplement glisser vers le bas pour fermer.
} else {
present(UINavigationController(rootViewController: login), // ajoute déjà un bouton `Cancel` pour le fermer.
animated: true,
completion: nil)
}
Ou implémentez votre propre UIViewController personnalisé en utilisant LoginWebView, et passez-le à une méthode authenticate de APIHandler en utilisant .webView(/* your login web view */).
Authentication.ResponseSi vous avez déjà persisté la Authentication.Response d'un utilisateur :
// récupérez la `key` renvoyée par `Authentication.Response.persist()`.
// dans notre exemple, nous l'avons stockée dans `UserDefaults`.
guard let key = UserDefaults.standard.string(forKey: "current.account") else { return print("`key` not found.") }
// récupérez la `Authentication.Response` persistée en toute sécurité.
guard let cache = Authentication.Response.persisted(with: key) else { return print("`Authentication.Response` not found.") }
// connectez-vous.
let handler = APIHandler()
handler.authenticate(with: .cache(cache)) { _ in
/* faites quelque chose ici */
}
Tous les endpoints sont facilement accessibles depuis votre instance APIHandler.
let handler: APIHandler = /* un handler valide et authentifié */
// par exemple, vous pouvez…
// …récupérer votre boîte de réception.
handler.messages.inbox(with: .init(maxPagesToLoad: .max),
updateHandler: nil,
completionHandler: { _, _ in /* faire quelque chose */ })
// …récupérer tous vos abonnés.
handler.users.following(user: .me,
with: .init(maxPagesToLoad: .max),
updateHandler: nil,
completionHandler: { _, _ in /* faire quelque chose */ })
De plus, les réponses affichent désormais chaque valeur contenue dans le fichier JSON renvoyé par l'API : accédez simplement à la rawResponse de n'importe quel ParsedResponse et commencez à naviguer, ou restez avec les accessoires suggérés (par exemple, username, name de User, etc. et aspectRatio, takenAt, content de Media, etc.).
Les pull requests et les issues sont les bienvenues.
1.* mainteneur2.* mainteneurNous cherchons activement des mainteneurs.
Reportez-vous à #244 pour plus d'informations.
SwiftyInsta est sous licence MIT. Voir LICENSE pour plus d'informations.