2010-03-23 13 views
13

वहाँ आर में TinyURL लिंक डिकोड करने के लिए इतना है कि मैं देख सकता हूँ जो वेब पृष्ठों वे वास्तव में उल्लेख करने के लिए एक तरीका है?आर में डीकोड tinyurl?

उत्तर

16

नीचे एक त्वरित और गंदी समाधान है, लेकिन काम करवाने चाहिए:

library(RCurl) 

decode.short.url <- function(u) { 
    x <- try(getURL(u, header = TRUE, nobody = TRUE, followlocation = FALSE)) 
    if(class(x) == 'try-error') { 
    return(u) 
    } else { 
    x <- strsplit(x, "Location: ")[[1]][2] 
    return(strsplit(x, "\r")[[1]][1]) 
    } 
} 

चर 'यू' नीचे एक shortend यूआरएल, और एक नियमित रूप से url होता है।

u <- c("http://tinyurl.com/adcd", "http://www.google.com") 

फिर आप निम्न कार्य करके विस्तारित परिणाम प्राप्त कर सकते हैं।

sapply(u, decode.short.url) 

उपर्युक्त सेवाओं को उन सेवाओं के लिए काम करना चाहिए जो यूआरएल को छोटा करते हैं, सिर्फ tinyURL नहीं। मुझे लगता है।

HTH

टोनी Breyal

1

मैं आर पता नहीं है, लेकिन सामान्य रूप में आप tinyurl-यूआरएल के लिए एक http अनुरोध बनाने की जरूरत है। आपको वास्तविक यूआरएल के साथ 301 प्रतिक्रिया वापस लेनी चाहिए।

0
library(RCurl) 

decode.short.url <- function(u) { 
    x <- try(getURL(u, header = TRUE, nobody = TRUE, followlocation = FALSE)) 
    if(class(x) == 'try-error') { 
    return(u) 
    } else { 
    x <- strsplit(x, "Location: ")[[1]][2] 
    return(strsplit(x, "\r")[[1]][1]) 
    } 
} 


(u <- c("http://tinyurl.com/adcd", "http://tinyurl.com/fnqsh")) 
(sapply(u, decode.short.url)) 
+0

टोनी, आप दो खाते हैं:

यहाँ कैसे मैं उस से निपटने के लिए टोनी कोड को संशोधित किया है? –

+0

@ जेडी-लांग हां, लेकिन मुझे नहीं पता कि दो खातों को कैसे गठबंधन करना है। शीर्ष पर एक ओपनआईडी का उपयोग करता है। मैं भी नीचे स्थित एक (खतरा माउस पिक के साथ) में लॉग इन करने के लिए कैसे याद नहीं कर सकते। मैं stackoverflow पर पोस्ट करने के लिए नया हूँ। –

1

मैं टोनी Breyal के कोड का इस्तेमाल किया है, लेकिन समारोह उन URL जहां कोई URL रीडायरेक्शन था के लिए NA मूल्यों लौट आए। टोनी सूचीबद्ध हालांकि अपने उदाहरण में "google.com", मैं गूगल google.com के स्थानीय संस्करण के कुछ प्रकार के किसी भी मामले में आप पुनर्निर्देश लगता है।

decode.short.url <- function(u) { 
    x <- try(getURL(u, header = TRUE, nobody = TRUE, followlocation = FALSE)) 
    if(class(x) == 'try-error') { 
    print(paste("***", u, "--> ERORR!!!!"))  
    return(u) 
    } else { 
    x <- strsplit(x, "Location: ")[[1]][2] 
    x.2 <- strsplit(x, "\r")[[1]][1] 
    if (is.na(x.2)){ 
     print(paste("***", u, "--> No change.")) 
     return(u) 
    }else{ 
     print(paste("***", x.2, "--> resolved in -->", x.2)) 
     return(x.2) 
    } 
    } 
} 


u <- list("http://www.amazon.com", "http://tinyurl.com/adcd") 
urls <- sapply(u, decode.short.url) 
संबंधित मुद्दे