
Instagram Private API Swift
Tenga en cuenta que SwiftyInsta ya no se mantiene activamente.
Consulte #244 para más información.
Eche un vistazo a Swiftagram si busca alternativas actualizadas.
Instagram ofrece dos tipos de API para desarrolladores. La Plataforma de la API de Instagram (extremadamente limitada en funcionalidad y a punto de ser descontinuada) y la API Graph de Instagram solo para cuentas de Business y Creator.
Sin embargo, las aplicaciones de Instagram dependen de un tercer tipo de API, la llamada API Privada o API No Oficial, y SwiftyInsta es un cliente para iOS, macOS, tvOS y watchOS para ellas, escrito completamente en Swift. Puede intentar crear una mejor experiencia de Instagram para sus usuarios, o escribir bots para automatizar diferentes tareas.
Estas API Privadas no requieren token ni registro de aplicación, pero no están autorizadas por Instagram para uso externo. Úselo bajo su propio riesgo.
File/Swift Packages/Add Package Dependency… del menú.https://github.com/TheM4hd1/SwiftyInsta.git.CocoaPods es un gestor de dependencias para proyectos Cocoa. Puede instalarlo con el siguiente comando:
$ gem install cocoapods
Para integrar SwiftyInsta en su proyecto Xcode usando CocoaPods, especifíquelo en su Podfile:
use_frameworks!
target '<Your Target Name>' do
pod 'SwiftyInsta', '~> 2.0'
end
Luego, ejecute el siguiente comando:
$ pod install
SwiftyInsta depende de CryptoSwift y keychain-swift.
Credenciales// these need to be strong references.
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.")
// persist cache safely in the keychain for logging in again in the future.
guard let key = response.persist() else { return print("`Authentication.Response` could not be persisted.") }
// store the `key` wherever you want, so you can access the `Authentication.Response` later.
// `UserDefaults` is just an example.
UserDefaults.standard.set(key, forKey: "current.account")
UserDefaults.standard.synchronize()
case .failure(let error):
if error.requiresInstagramCode {
/* update interface to ask for code */
} else {
/* notify the user */
}
}
}
Una vez que el usuario haya escrito el código de autenticación de dos factores o el código de desafío, simplemente haga
self.credentials.code = /* the code */
Y el completionHandler en el anterior authenticate(with: completionHandler:) capturará automáticamente la respuesta.
LoginWebViewControllerlet login = LoginWebViewController { controller, result in
controller.dismiss(animated: true, completion: nil)
// deal with authentication response.
guard let (response, _) = try? result.get() else { return print("Login failed.") }
print("Login successful.")
// persist cache safely in the keychain for logging in again in the future.
guard let key = response.persist() else { return print("`Authentication.Response` could not be persisted.") }
// store the `key` wherever you want, so you can access the `Authentication.Response` later.
// `UserDefaults` is just an example.
UserDefaults.standard.set(key, forKey: "current.account")
UserDefaults.standard.synchronize()
}
if #available(iOS 13, *) {
present(login, animated: true, completion: nil) // just swipe down to dismiss.
} else {
present(UINavigationController(rootViewController: login), // already adds a `Cancel` button to dismiss it.
animated: true,
completion: nil)
}
O implemente su propio UIViewController personalizado usando LoginWebView, y páselo a un método authenticate de APIHandler usando .webView(/* your login web view */).
Authentication.ResponseSi ya ha persistido el Authentication.Response de un usuario:
// recover the `key` returned by `Authentication.Response.persist()`.
// in our example, we stored it in `UserDefaults`.
guard let key = UserDefaults.standard.string(forKey: "current.account") else { return print("`key` not found.") }
// recover the safely persisted `Authentication.Response`.
guard let cache = Authentication.Response.persisted(with: key) else { return print("`Authentication.Response` not found.") }
// log in.
let handler = APIHandler()
handler.authenticate(with: .cache(cache)) { _ in
/* do something here */
}
Todos los endpoints son fácilmente accesibles desde su instancia de APIHandler.
let handler: APIHandler = /* a valid, authenticated handler */
// for instance you can…
// …fetch your inbox.
handler.messages.inbox(with: .init(maxPagesToLoad: .max),
updateHandler: nil,
completionHandler: { _, _ in /* do something */ })
// …fetch all your followers.
handler.users.following(user: .me,
with: .init(maxPagesToLoad: .max),
updateHandler: nil,
completionHandler: { _, _ in /* do something */ })
Además, las respuestas ahora muestran cada valor contenido en el archivo JSON devuelto por la API: simplemente acceda a cualquier ParsedResponse rawResponse y comience a navegar, o quédese con los accesorios sugeridos (por ejemplo, username, name, etc. de User y aspectRatio, takenAt, content, etc. de Media).
Las pull requests y los issues son más que bienvenidos.
1.* mantenedor2.* mantenedorEstamos buscando activamente mantenedores.
Consulte #244 para más información.
SwiftyInsta está licenciado bajo la licencia MIT. Consulte LICENSE para más información.