2017-04-02 1 views
1

Y at-il un moyen que le lien de résultat pour montrer le lien exact, pas le bing rediriger un?Bing recherche cognitive, site réel dans l'URL, pas de redirection bing

Par exemple, y at-il un moyen dans bing cognitive search de mettre href le lien réel au lieu d'une redirection?

`"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 ..." 
     } 
     ]` 

alors l'URL est le lien actuel?

Répondre

0

La seule façon que nous avons trouvé est juste enlever <b> et </b> de displayUrl ...

+0

Oui, mais c'est l'URL frontale; Pour être affiché, il se peut que ce ne soit pas le chemin complet de l'URL .... –

1

Vous pouvez utiliser le paramètre de requête « r = » dans l'URL pour obtenir l'URL exacte où la redirection est pointé. Un échantillon url bing ressemble à ce

"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" 

Ici,

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

Notez que l'URL est codée. Effectuez le décodage de l'URL si nécessaire. Tout cela peut être fait en utilisant le code Java suivant.

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

Cool, je vois ça, mais cela ne viendrait-il pas à bout des conditions d'utilisation? Quelle est votre expérience dans ce domaine? –

+0

Les conditions d'utilisation et d'affichage de l'API Bing Search à l'adresse https://docs.microsoft.com/fr-fr/azure/cognitive-services/bing-web-search/useanddisplayrequirements indiquent que vous ** ne devez pas modifier le contenu des résultats (autre que de les reformater d'une manière qui ne viole aucune autre exigence); ** car ils utilisent l'URL de redirection pour la collecte de données. –