2017-04-02 1 views
1

결과 링크가 빙빙 리디렉션하지 않고 정확한 링크를 표시하는 방법이 있습니까?빙 인식 검색, URL의 실제 사이트, 빙 리디렉션이 아닙니다.

예를 들어 빙의 인식 검색에서 리디렉션 대신 실제 링크를 삽입하는 방법은 있습니까?

`"value": [ 
{ 
    "id": "https://api.cognitive.microsoft.com/api/v5/#WebPages.0", 
    "name": "<b>Burrito Recipes</b> - Allrecipes.com", 
    "url": "http://www.bing.com/cr?IG=4BE4CA19570B4740ABE2B85782727544&CI......", 
    "displayUrl": "all<b>recipes</b>.com/<b>recipes</b>/1216", 
    "snippet": "<b>Burrito Recipes</b> ...", 
    "deepLinks": [ 
     { 
      "name": "Mexican", 
      "url": "http://www.bing.com/cr?IG=4BE4CA19570B4740ABE2BF...", 
      "snippet": "Mexican Recipes Find ..." 
     } 
     ]` 

그래서 실제 링크가 될 URL은 무엇입니까? 우리가 발견하는 유일한 방법은 단지 displayUrl에서 <b></b>을 제거하는 것입니다

답변

0

...

+0

예, 그렇지만 프런트 엔드 URL입니다. 표시 되려면 전체 URL 경로가 아닐 수도 있습니다 .... –

1

당신은 리디렉션이 가리키는 정확한 URL을 얻을 수있는 URL에 'R ='쿼리 매개 변수를 사용할 수 있습니다. 샘플 빙 URL은, 다음이

"url": "http://www.bing.com/cr?IG=584DA9A5C8B245DDA12848B177BAF817&CID=138CDEBD227860443797D43D239D616C&rd=1&h=0UIFjW9hoNBrd0LFRhopxM1IDwbKCHvSc-z-FdLfyMQ&v=1&r=http%3a%2f%2fallrecipes.com%2frecipes%2f1216%2fworld-cuisine%2flatin-american%2fmexican%2fmain-dishes%2fburritos%2f&p=DevEx,5066.1" 

같은 URL이 인코딩되는 것을

r=http%3a%2f%2fallrecipes.com%2frecipes%2f1216%2fworld-cuisine%2flatin-american%2fmexican%2fmain-dishes%2fburritos%2f 

주를 보인다. 필요한 경우 URL 디코딩을 수행하십시오. 이 모든 작업은 다음 Java 코드를 사용하여 수행 할 수 있습니다.

import org.apache.http.NameValuePair; 
import org.apache.http.client.utils.URIBuilder; 
import org.apache.log4j.Logger; 

import java.net.URISyntaxException; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
import java.util.stream.Collectors; 

public static String getExactUrl(String url) { 
    Map<String, String> queryParams = getQueryParamsMap(url); 
    return queryParams.getOrDefault("r", url); 
} 

public static Map<String, String> getQueryParamsMap(String url) { 
    Map<String, String> queryParamsMap = new HashMap<>(); 
    try { 
     URIBuilder uriBuilder = new URIBuilder(url); 
     List<NameValuePair> queryParams = uriBuilder.getQueryParams(); 
     queryParamsMap = queryParams.stream().collect(Collectors.toMap(NameValuePair::getName, NameValuePair::getValue)); 
    } catch (URISyntaxException e) { 
     e.printStackTrace(); 
    } 
    return queryParamsMap; 
} 
+0

멋지다. 알겠지만이 서비스 약관을 위반하지 않습니까? 이게 너의 경험이야? –

+0

Bing Search API 사용 및 표시 요구 사항은 https://docs.microsoft.com/en-gb/azure/cognitive-services/bing-web-search/useanddisplayrequirements에서 ** 결과의 내용을 수정하면 안됨을 언급합니다 (다른 요구 사항을 위반하지 않는 방식으로 형식을 변경하는 것 외) ** 데이터 수집을 위해 리디렉션 URL을 사용함에 따라. –