mirror of
https://github.com/samuelclay/NewsBlur.git
synced 2025-08-21 05:45:13 +00:00
95 lines
4.5 KiB
Objective-C
Executable file
95 lines
4.5 KiB
Objective-C
Executable file
//
|
||
// OSKWebPageTitleUtility.m
|
||
// Unread
|
||
//
|
||
// Created by Jared on 4/30/14.
|
||
// Copyright (c) 2014 Nice Boy LLC. All rights reserved.
|
||
//
|
||
|
||
#import "OSKWebPageTitleUtility.h"
|
||
|
||
@implementation OSKWebPageTitleUtility
|
||
|
||
+ (void)getWebPageTitleForURL:(NSString *)url completion:(void(^)(NSString *fetchedTitle))completion {
|
||
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
|
||
NSURLSession *sesh = [NSURLSession sharedSession];
|
||
[[sesh dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
|
||
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
||
__block NSString *title = nil;
|
||
if (data) {
|
||
NSString *html = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
|
||
if (html.length) {
|
||
NSError *error = NULL;
|
||
NSRegularExpression *regex = [NSRegularExpression
|
||
regularExpressionWithPattern:@"<title>(.+)</title>"
|
||
options:NSRegularExpressionCaseInsensitive
|
||
error:&error];
|
||
[regex enumerateMatchesInString:html options:0 range:NSMakeRange(0, [html length]) usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop){
|
||
title = [html substringWithRange:[match rangeAtIndex:1]];
|
||
*stop = YES;
|
||
}];
|
||
}
|
||
}
|
||
|
||
if (title.length) {
|
||
title = [title stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
|
||
title = [self stripHTMLEntitiesFromString:title];
|
||
}
|
||
|
||
if (title.length == 0) {
|
||
NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"];
|
||
title = [NSString stringWithFormat:@"Saved with %@", appName];
|
||
}
|
||
|
||
if (completion) {
|
||
completion(title);
|
||
}
|
||
});
|
||
}] resume];
|
||
}
|
||
|
||
+ (NSString *)stripHTMLEntitiesFromString:(NSString *)sourceString {
|
||
if (sourceString.length == 0) {
|
||
return @"";
|
||
}
|
||
NSMutableString *string = [NSMutableString stringWithString:sourceString];
|
||
NSDictionary *symbolReplacementPairs = @{
|
||
@" ":@" ",
|
||
@"&":@"&",
|
||
@"¢":@"¢",
|
||
@"£":@"£",
|
||
@"¥":@"¥",
|
||
@"€":@"€",
|
||
@"©":@"©",
|
||
@"®":@"®",
|
||
@"™":@"™",
|
||
@" ":@" ",
|
||
@""":@"\"",
|
||
@"'":@"'",
|
||
@"¡":@"¡",
|
||
@"–":@"–",
|
||
@"—":@"—",
|
||
@"‘":@"‘",
|
||
@"’":@"’",
|
||
@"“":@"“",
|
||
@"”":@"”",
|
||
@"–":@"–",
|
||
@"'":@"'",
|
||
@""":@"\"",
|
||
@"&":@"&",
|
||
@"‘":@"‘",
|
||
@"’":@"’",
|
||
@"“":@"“",
|
||
@"”":@"” ",
|
||
};
|
||
for (NSString *key in symbolReplacementPairs.allKeys) {
|
||
NSString *replacement = [symbolReplacementPairs objectForKey:key];
|
||
[string replaceOccurrencesOfString:key
|
||
withString:replacement
|
||
options:NSCaseInsensitiveSearch
|
||
range:NSMakeRange(0, string.length)];
|
||
}
|
||
return string;
|
||
}
|
||
|
||
@end
|