2012-09-19 15 views
11
तरह

मैं उसी तरह से एक ऐसा iOS ऐप्लिकेशन फेसबुक करता है कि में एक लिंक पूर्वावलोकन एम्बेड करने के लिए कोशिश कर रहा हूँ:iOS एप्लिकेशन में पूर्वावलोकन एंबेडेड लिंक फेसबुक

enter image description here

मैं के लिए एक रास्ता निकालने की कोशिश कर रहा हूँ सबसे उपयुक्त छवि (और इसे यूआरएल वापस करें), पेज शीर्षक, और यहां तक ​​कि एक मेटा विवरण भी लें और इसे एप्लिकेशन पर वापस पास करें, लेकिन मुझे सबसे अच्छा तरीका पता नहीं है।

एपीआई हैं जो ऐसा करते हैं, अधिकतर कीमत के लिए, लेकिन ऐसा लगता है कि यह मुश्किल नहीं होना चाहिए। कोई विचार?

+4

आप _anything_ की कोशिश की है मेरे लिए काम किया responseSerlializer आवंटित करने के लिए? – Abizern

+0

अच्छी तरह से, मैंने PHP में एक बहुत ही बुनियादी लिंक पूर्वावलोकन बनाया है जो किसी दिए गए वेब पेज से कुछ डेटा खींचता है, लेकिन यह काफी कच्चा था – d2burke

+1

क्या आपको कुछ मिला है? – Esqarrouth

उत्तर

3

आप यह सर्वर-साइड या क्लाइंट-साइड कर सकते हैं।

सर्वर-साइड, आप HTML पृष्ठ के <head> टैग को पकड़ने के लिए एक स्क्रिप्ट (जैसे आपने बनाया है) का उपयोग कर सकते हैं।

क्लाइंट-साइड आप संपूर्ण पृष्ठ को HTML के रूप में डाउनलोड कर सकते हैं (उदाहरण के लिए, मैशबल ~ 180 केबी) NSRLConnection या AFNetworking जैसी लाइब्रेरी और <head> टैग खोजने के लिए इसे XML पार्सर के साथ पार्स करें।

मैं आपको एक सर्वर स्क्रिप्ट बनाने का सुझाव देता हूं, ताकि आप इसे अन्य परियोजनाओं या अन्य प्लेटफ़ॉर्म में पुन: उपयोग कर सकें।

+0

क्या किसी को इस लिंक पूर्वावलोकन से संबंधित कोई नमूना मिला है, मैं इसे अपने चैट ऐप में से एक का उपयोग करना चाहता था। अग्रिम में धन्यवाद। –

+0

मैं वही काम करना चाहता हूं ... –

2

मैं एक ही लक्ष्य के लिए जा रहा था और मैं ग्राहक के पक्ष

मैं इस्तेमाल किया पर यह किया इन फली

pod 'HTMLReader' 
pod 'AFNetworking' 

तब मैं AFHTTPResponseSerializer से विरासत में मिला और एक वस्तु है कि लिंक विवरण शामिल लौटे

#import <UIKit/UIKit.h> 

@interface LinkDetails : NSObject 

@property (nonatomic,strong) NSString *linkURL; 

@property (nonatomic,strong) NSString *linkHOST; 

@property (nonatomic,strong) NSString *linkTitle; 

@property (nonatomic,strong) NSString *linkDescription; 

@property (nonatomic,strong) NSString *linkWebSiteName; 

@property (nonatomic,strong) NSString *linkImageUrl; 

@property (nonatomic,strong) UIImage *linkImage; 

@end 

यह मेरी प्रतिक्रिया के लिए हेडर हैरियलाइज़र

#import <AFNetworking/AFNetworking.h> 

@interface HTMLResponseSerializer : AFHTTPResponseSerializer 

@end 

और यह मेरा responseSerializer

के लिए कार्यान्वयन है
#import "HTMLResponseSerializer.h" 
#import <HTMLReader/HTMLReader.h> 
#import "LinkDetails.h" 

@implementation HTMLResponseSerializer 

-(id)responseObjectForResponse:(NSURLResponse *)response data:(NSData *)data error:(NSError *__autoreleasing _Nullable *)error{ 

    NSString *responseStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 

    LinkDetails *details = [[LinkDetails alloc] init]; 

    HTMLDocument *document = [HTMLDocument documentWithString:responseStr]; 

    NSArray *metaTags = [document nodesMatchingSelector:@"meta"]; 

    for (HTMLElement *metaTag in metaTags) { 

     if ([[[metaTag attributes] objectForKey:@"property"] isEqualToString:@"og:url"] || [[[metaTag attributes] objectForKey:@"property"] isEqualToString:@"twitter:url"]) { 
      NSLog(@"%@",[[metaTag attributes] objectForKey:@"content"]); 
      details.linkURL = [[metaTag attributes] objectForKey:@"content"]; 
     } 

     if ([[[metaTag attributes] objectForKey:@"property"] isEqualToString:@"og:title"] || [[[metaTag attributes] objectForKey:@"property"] isEqualToString:@"twitter:title"]) { 
      NSLog(@"%@",[[metaTag attributes] objectForKey:@"content"]); 
      details.linkTitle = [[metaTag attributes] objectForKey:@"content"]; 
     } 

     if ([[[metaTag attributes] objectForKey:@"property"] isEqualToString:@"og:description"] || [[[metaTag attributes] objectForKey:@"property"] isEqualToString:@"twitter:description"]) { 
      NSLog(@"%@",[[metaTag attributes] objectForKey:@"content"]); 
      details.linkDescription = [[metaTag attributes] objectForKey:@"content"]; 
     } 

     if ([[[metaTag attributes] objectForKey:@"property"] isEqualToString:@"og:image"] || [[[metaTag attributes] objectForKey:@"property"] isEqualToString:@"twitter:image"]) { 
      NSLog(@"%@",[[metaTag attributes] objectForKey:@"content"]); 
      details.linkImageUrl = [[metaTag attributes] objectForKey:@"content"]; 
     } 

     if ([[[metaTag attributes] objectForKey:@"property"] isEqualToString:@"og:site_name"] || [[[metaTag attributes] objectForKey:@"property"] isEqualToString:@"twitter:site_name"]) { 
      NSLog(@"%@",[[metaTag attributes] objectForKey:@"content"]); 
      details.linkWebSiteName = [[metaTag attributes] objectForKey:@"content"]; 
     } 
    } 

    if(!details.linkTitle){ 
     details.linkTitle = [document firstNodeMatchingSelector:@"title"].textContent; 
    } 

    if(!details.linkDescription){ 
     details.linkTitle = [document firstNodeMatchingSelector:@"description"].textContent; 
    } 

    if (!details.linkHOST) { 
     details.linkHOST = [response.URL host]; 
    } 

    if (!details.linkURL) { 
     details.linkURL = [response.URL absoluteString]; 
    } 

    return details; 
} 

@end 

मत भूलना अपने कस्टम एक

यह बहुत अच्छी तरह से

संबंधित मुद्दे