Tag: api

Instagram API-使用Swift进行身份验证

本教程将向您介绍Instagram API,并教您如何验证Instagram帐户并检索访问其他端点(例如,获取媒体,喜欢,评论,关系等)所需的ACCESS_TOKEN。尚未使用任何第三方库。 1要使用该API,我们需要在Instagram API平台上注册一个应用程序并接收一个CLIENT ID。 下面的表格显示了该屏幕的外观。 我已经填写了一些虚拟的详细信息,因此在注册您的应用程序时请使用您自己的信息。 所有字段均为必填项。 对于redirect_uri字段,请输入一个有效域,并将其写下来,因为稍后您将需要它。 另外,如果您在使用隐私政策时遇到困难,可以在此处找到示例模板。 2输入所有必需的详细信息后,单击“详细信息”选项卡旁边的“安全性”选项卡,然后取消选中“ 禁用隐式OAuth”。 默认情况下,应选中它,如下所示。 完成后,只需单击注册按钮。 3如果您的应用程序已成功注册,您将被重定向到“管理客户端”屏幕,您可以在其中找到您的客户端信息。 Instagram默认将您的API设为沙盒模式。 这意味着每个访问令牌每小时只能使用500个请求。 如果您想了解有关限制的更多信息,可以在速率限制下找到它。 该限制足以进行测试,但如果要上线,则需要提交生产模式。 为此,Instagram希望您完成您的应用程序,然后录制视频以展示您如何使用其API,然后提交以供审核。 您还需要选择所需的权限。 提交过程类似于Facebook API。 您可以在管理->权限下找到提交表单。 Instagram API平台已完成。 现在让我们做一些编码! 🤓 Instagram没有像Facebook那样为我们提供应用程序登录。 相反,我们需要直接在UIWebView中调用特定的URL,这将打开Instagram登录表单。 然后,用户应输入他的凭据,我们的工作是拦截回调的响应。 这是实现Instagram身份验证的唯一方法。 我不会告诉您如何在界面生成器中添加UIWebView组件,就像我已经知道的那样。 我将只关注代码。 在继续之前,请使用UIWebView组件和IBOutlet创建单独的控制器。 添加常数 首先,我们将常量存储在名为API的结构下。 我更喜欢将所有常量保留在名为Constants.swift的单独文件下。 struct API {static let INSTAGRAM_AUTHURL =“ https://api.instagram.com/oauth/authorize/”static let INSTAGRAM_CLIENT_ID =” YOUR_CLIENT_ID“ static let INSTAGRAM_CLIENTSERCRET =” YOUR_CLIENT_SECRET“ static […]

选择您自己的代表

通过提供相同数据的多种表示,HTTP API可以对客户端更友好 当客户端从API请求数据时,它可能只需要可用字段的子集,但是许多API仅提供可用数据的单一表示。 我们可以使用内容协商,而不仅仅是在json或xml(或其他)之间进行选择,并提供客户要求的内容。 样本API 许多应用程序使用属于用户的项目集合的概念,因此在这里我们将使用喜欢的颜色的集合。 我们可以使用长颈鹿在F#中定义一个简单的my-colors端点: 这定义了一个Color类型,其中包含一些不同的属性,并通过GET请求使它们的集合可用。 它返回一个硬编码的值列表,但这只是一个示例,这样就可以了。 我们还可以创建一个简单的客户端,以从端点检索数据并将其显示给最终用户。 快速代码示例是使用URLSession和Decodable协议的iOS应用程序的一部分,使事情变得简单: 这种方法效果很好,但是我们已经可以看到API提供的数据与客户端实际需要的数据之间存在不匹配-API返回了一堆客户端不需要关心的字段。 对于此示例API来说,这不是什么大问题,但是如果列表中有很多条目或者我们的颜色对象更复杂,则可能会成为问题。 幸运的是,我们有一些方法可以使我们的API与客户需求相匹配。 一种新的媒体类型 我们不能仅仅从API响应中删除值,因为可能还有其他客户端依赖该数据,但是如果我们为客户端提供一种请求其他响应的方式,那么我们可以为每个客户端提供一个包含其数据的响应需要。 首先,我们需要配置Giraffe以支持自定义媒体类型。 为此,我们不需要任何自定义序列化,因此我们可以使用已经配置的json序列化器。 然后,我们可以创建颜色的自定义表示,并从端点向要求迷你版本的客户端返回它。 通过将我们的API配置为将迷你颜色响应返回给请求它的客户端,我们可以更新我们的应用程序客户端以发送新的Accept标头。 方便地,对于我们的快速客户端,设置额外的标头很简单: 现在,我们的客户请求一个特定的响应,而我们的API提供了响应,这非常好……目前。 但是,这的确会使我们的API和客户端耦合在一起-如果将来客户需要更改,那么即使已经可以提供该字段,我们的API也将需要更新,我们唯一的选择是全部或全部。 询问我们需要什么 我们希望找到一种方法,使我们的客户可以根据需要调整从API获取的数据, 而无需更改API 。 这意味着我们将需要某种方式让客户端描述其希望从API接收的数据。 现有几种描述API应该返回给客户端的数据形状的方法,尤其是GraphQL和JSON:API,因此值得考虑如何以不必将我们与任何特定事物联系在一起的方式来实现它如果以后要更改首选项,或者特别是在我们拥有具有不同需求的不同API客户端的情况下,请在将来实施。 内省的ReST建议使用MicroType作为构成媒体类型的一种方式。 使用该方法,我们现在可以添加一种过滤方法,然后在不破坏任何客户端的情况下,在以后添加对不同方法的支持。 因此,我们需要进行以下更改: 切换我们的API以使用可以支持过滤的媒体类型 我们将使用一种通用的api媒体类型: application / vnd.chamook.api + json ,它可以在与此API连接的所有api上使用。 我们不使用诸如application / json之类的东西,因为我们不能保证返回简单旧json的API将支持过滤(或我们想要添加的任何其他功能)。 定义我们的客户可以使用的过滤语法 我们可以使用前面提到的一种奇特的选择。 但是现在我们只需要一个非常简单的过滤器,因此自定义字段列表可能会更易于实现。 因为我们使用的是MicroType,所以如果以后确实需要,我们总是可以在以后添加对GraphQL之类的支持。 更新我们的客户端以使用新的过滤方法 完成此更新后,我们的客户端和API应该很好地分离,以便将来对过滤进行任何更改。 我们可能会增加API来描述客户端可用过滤选项的方式,但是如果我们不想使用该API的ReSTful方法,我们可以将其保留为文档中包含的内容-只要我们在API表面遵循通用约定,就不会有太大问题。 最终表格 做出决定后,我们可以使用以下代码更新API(使用最简单的过滤方法,通过指定响应中应包含哪些字段作为媒体类型的参数): 我们的客户只需要稍作更改即可使用新版本: 现在,我们的客户可以准确地指定所需的字段,并且我们的API将做出适当的响应。 仍然有一些可以改进的地方,但是到目前为止已经足够了。 […]

iOS酒店/咖啡厅/餐厅search

我需要在我的ios应用程序中实现酒店/咖啡厅/餐厅search。 按城市search。 有近10个城市,需要显示信息,例如在这个城市的所有酒店。 (图片,名称,简短描述,地址,也许评分或类似的东西)。 你会请教我一些API,我可以用于这个目的。 我发现的 – 谷歌地图与谷歌地方的东西。 也许这是最好的解决scheme,但我不确定。 和Expedia – http://developer.ean.com/docs/read/hotel_list但在这里,我们只有酒店search也许你有更好的想法?

如何在IOS应用程序中实现谷歌图片search?

我想在我的IOS应用程序中实现谷歌图片search,将有一个search栏,用户可以input任何东西来获取相关的图像,如鼠标,这将导致鼠标的图像,然后这些图像将显示在我的应用程序。 有什么API或其他的东西给谷歌图片search结果。

为什么我的API调用失败

我有以下代码: func convert(currencyToConvert:String,amount:Double,currencyToConvertTo:String,date:String)->Double{ makeConnection(date: date) usleep(80000) if let x = currencyRates[currencyToConvert]{ var a = 0.00 if currencyToConvert == "USD"{ a = amount*currencyRates["SGD"]! } else { a = (amount*currencyRates[currencyToConvertTo]!)/x } return a } else { print("currency not available") return 0.00 } } func makeConnection(date:String){ currencyRates.removeAll() let url = URL(string: "https://openexchangerates.org/api/historical/\(date).json?app_id=xyz") let task = URLSession.shared.dataTask(with: url!) { […]

在这里打开手机地图url

我正在开发混合应用程序,并希望从任何设备(android / ios / windows phone / web)访问HERE地图url 我试图按照这个答案: 创buildURL到here.com 但是在所有情况下都不起作用。 在我的情况下,我试过这个url: https ://www.here.com/directions/drive/start: 48.85,2.35/ end: 52.51,13.38 Android没有这里地图应用程序安装:打开m.here.com – > 确定 Android与Here地图安装:打开m.here.com,但没有find安装的应用程序 – > 失败 iOS没有这里地图应用程序安装:打开m.here.com – > 确定 iOS与这里地图应用程序安装:打开m.here.com,并问我们是否要使用应用程序安装,但如果我点击是,应用程序说我'找不到行程' – > 失败 Windows Phone 10没有这里地图应用程序安装:请问我安装在这里地图应用程序,如果我说是,redirect存储没有结果(失败),如果我说不,错误页面 – > 失败 Windows Phone 10与这里地图应用程序安装:打开应用程序,但说我'找不到行程' – > 失败 networking: 好的 我比成功案例更多的错误,所以我不能使用这种types的url。 如果没有安装应用程序,是否还有其他types的URL可用于打开m.here.com如果安装了应用程序,是否可以启动应用程序? (或者至less在所有情况下打开m.here.com )

如何从Google(而不是从Google+)获取用户个人资料照片?

使用Google+ API我能够获取有关用户个人资料的所有信息,以及我正在做的方式是通过调用以下地址的GET : https://www.googleapis.com/plus/v1/people/11812536713708…432 ?key=AIzaSyC_bs…gds353le 在这里,我把用户configuration文件ID(用户的谷歌身份证)和我的API密钥。 现在有两种情况: 1)用户之前build立了一个谷歌+configuration文件,然后我得到一个JSON文件与所有必要的数据(如他的个人资料照片,名称等) 2)用户之前没有设置一个谷歌+configuration文件,然后我得到的json文件如下: { "error": { "errors": [ { "domain": "global", "reason": "notFound", "message": "Not Found" } ], "code": 404, "message": "Not Found" } } 所以在用户目前还没有Google +帐户的情况下,我无法获取他的照片。 有没有一种服从它的方式,不知何故从google +获取他的个人资料的详细信息? 在我的iOS应用程序中,我使用的是谷歌loginfunction,它们提供了为login用户提取数据的可能性(以下是一些细节https://developers.google.com/identity/sign-in/ios/people #retrieving_user_information ),当我使用它并login到我的应用程序与没有激活的谷歌+的帐户,我仍然能够获取该用户的名字,照片等。它不是来自谷歌+,在这种情况下它来自GIDGoogleUser对象。 但是,只有当用户提供我的用户名和密码时,我才能构build这个对象。 那么有没有办法通过提供谷歌用户ID和API密钥从任何谷歌API获取数据?

即使一个API失败,也可以加载View Controller

我有三个API从数据中提取数据,并将其放入ViewController.m的UITableView 。 有没有办法让UITableView加载,如果其中一个网站没有加载? 现在, ViewController.m只是不加载,如果所有3个来源不加载我的方法。 这是我使用的方法: – (void)loadOneWithSuccess:(void (^)(RKObjectRequestOperation *operation, RKMappingResult *mappingResult))success failure:(void (^)(RKObjectRequestOperation *operation, NSError *error))failure { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *tNE = [defaults objectForKey:[NSString stringWithFormat:@"tNE%@", bn]]; NSString *path = [NSString stringWithFormat:@"xx/%@/", tNE]; [self.eObjectManager getObjectsAtPath:path parameters:nil success:success failure:failure]; } – (void)loadMedia { self.combinedModel = [NSMutableArray array]; // Here's the #1 [self loadOneWithSuccess:^(RKObjectRequestOperation […]

从谷歌访问结果放置API自动完成

我正在使用这种方法来获取build议,我需要在tableview中显示它们: – (void)placeAutocomplete:(NSString *)autoCompleteString { [self.autoCompleteSuggestionsList removeAllObjects]; GMSAutocompleteFilter *filter = [[GMSAutocompleteFilter alloc] init]; filter.type = kGMSPlacesAutocompleteTypeFilterCity; [_placesClient autocompleteQuery:(NSString *)autoCompleteString bounds:nil filter:filter callback:^(NSArray *results, NSError *error) { if (error != nil) { NSLog(@"Autocomplete error %@", [error localizedDescription]); return; } for (GMSAutocompletePrediction* result in results) { //NSLog(@"Result '%@' with placeID %@", result.attributedFullText.string, result.placeID); //NSRange autoCompleteRange = [result.attributedFullText.string […]

在Objective-C中,处理asynchronoushttp请求比委托更清晰吗?

我正在构build一个iPhone应用程序,大量利用我在PHP中编写的Web服务。 现在我有一个文件(API.h / API.m),它具有通过NSURLConnection在我的Web服务上调用PHP函数的方法。 方法如下: -(void) mediaAdd:(UIImage *)image withDelegate: (id<apiRequest>) delegate; -(void) mediaGet:(NSString *)imageURL withDelegate: (id<apiRequest>) delegate; 这些方法由应用程序中的控制器(由MVC模式定义的控制器)调用,并且方法以控制器作为委托。 一旦API.h / API.m中被调用方法的请求完成,请求完成时调用API.h / API.m中的NSURLConnection委托方法,然后调用委托方法… -(void) serverResponse:(NSDictionary *) response fromCall:(NSString *)call; …当然是在调用API.h / API.m中的方法的控制器上执行的。 当控制器需要进行多个API调用时,我的问题,或者更糟糕的情况就会出现。 因为我只有一个委托方法,所以我使用serverResponse方法中的call参数来区分不同的调用。 以下是serverResponse方法实例的一个框架: //API Delegate -(void)serverResponse:(NSDictionary *)response fromCall:(NSString *)call { bool local = false; NSString *callbackString; if (local) { callbackString = @"http://localhost/"; } […]