gpt4 book ai didi

ios - 在 Twitter 私信中获取 %20

转载 作者:行者123 更新时间:2023-11-29 12:43:41 28 4
gpt4 key购买 nike

您好,这是我用于向 Twitter 关注者/关注者发送私有(private)消息的代码,消息已发送,但问题是关注者正在获取带有 %20 的消息字符串

 -(void)PostOnTwitter :(NSArray *)ParamArray
{

NSLog(@"ParamArray===%@",ParamArray);
if([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter])
{
if(!accountStore)
accountStore = [[ACAccountStore alloc] init];
ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];

[accountStore requestAccessToAccountsWithType:accountType options:nil completion:^(BOOL granted, NSError *error)
{
if(granted!=0)
{
NSArray *twitterAccounts = [self.accountStore accountsWithAccountType:accountType];

NSURL *MsgUrl=[NSURL URLWithString:@"https://api.twitter.com/1.1/direct_messages/new.json"];


NSDictionary *Msgparams = @{@"screen_name" : [ParamArray objectAtIndex:0], @"text" :
[[ParamArray objectAtIndex:1]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] };
SLRequest *Msgrequest = [SLRequest requestForServiceType:SLServiceTypeTwitter requestMethod:SLRequestMethodPOST URL:MsgUrl parameters:Msgparams];
[Msgrequest setAccount:[twitterAccounts lastObject]];
[Msgrequest performRequestWithHandler:^(NSData *responseData,NSHTTPURLResponse *urlResponse,NSError *error) {
if (responseData) {

if (urlResponse.statusCode >= 200 && urlResponse.statusCode < 300) {
NSError *jsonError;
NSDictionary *timelineData = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingAllowFragments error:&jsonError];

if (timelineData) {

[self performSelectorOnMainThread:@selector(CardHasSent) withObject:nil waitUntilDone:NO];
}
}
}

}];

}
}];
}
}

我的关注者正在收到像这样的私信

   user%20has%20sent%20you%20a%20card%20from%20happy%20heART%20cards.%20http://www.happyheartcards.net/o.php?t=ODYw

如何发送正确的文本?请帮助。

我认为 problem 是 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding,但如果我不使用 NSUTF8StringEncoding 消息发送失败。

ParamArray 之前没有编码 ParamArray===( jry088, “用户已从 happy heART 卡片中向您发送了一张卡片。http://www.happyheartcards.net/o.php?t=OTA1”)

最佳答案

%20 确实是空格字符的字符串转义,这是您在使用 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding 时请求的正确行为。但是,Twitter API 确实需要像这样编码的直接消息的 POST 数据: https://dev.twitter.com/docs/api/1.1/post/direct_messages/new

因此我认为最有可能的事情是你运行了两次编码,这意味着你的 %20s 被重新编码为“嘿,我真的是指一个百分比在这里签名。

当我查看代码时,有多个对 [ParamArray objectAtIndex:1] 的冗余调用以及之前将字符串数据重新编码为 UTF8:

             NSString *StringData = [ParamArray objectAtIndex:1];

const char *cString = [StringData UTF8String];

NSString *Datastringone = [NSString stringWithFormat:@"%s",cString];

NSString *str = [ParamArray objectAtIndex:1];

这些变量或这个处理都没有被使用过。这让我想知道 ParamArray 中的字符串是否在您的应用程序的早期部分已经被编码为 UTF8,以便您在此处传递它时第二次对其进行编码。

         NSDictionary *Msgparams = @{@"screen_name" : [ParamArray objectAtIndex:0], @"text" :
[[ParamArray objectAtIndex:1]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] };

编辑实际上,在更新上述内容之前,我将返回到我最初发布的内容。我认为你实际上得到了你对编码文本的要求,问题不应该是为什么你在你的文本中得到 %20s,而是为什么你现在得到的代码正在接受 DM 而它毕竟失败了。

如果您查看我上面链接的 API 引用 (https://dev.twitter.com/docs/api/1.1/post/direct_messages/new),它会将 POST 数据显示为之前编码的 %,但如果您实际查看要提交的内容的完整代码示例,则该字符串不是t 实际上根本没有编码:

94    "text": "hello, tworld. welcome to 1.1."

所以首先——尽可能少地更改其他内容,但删除编码阶段,并确认您仍然无法发送 DM。可能是您在没有意识到的情况下修复了其他问题,这就是 POST 开始工作的原因。如果不将编码阶段嵌入到字典的创建中,这显然会有所帮助。如果您分别创建所有值,然后在创建字典时传递最终编码和准备好的变量,您将获得更易读的代码。可能会创建更多的临时变量或指针,但为了提高代码的可读性,这是非常值得的。 :)

关于ios - 在 Twitter 私信中获取 %20,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24216711/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com