2016-08-02 3 views
0

J'utilise Postman et Javascript pour interroger l'API Confluence sur un compte Cloud atlassian.net.Confluence REST API Search - Erreur lors de l'encodage de la requête CQL lors du codage

Lorsque j'utilise + dans des endroits des espaces pour CQL ça marche pour moi (donc ce n'est pas une question de travail à autorisation - cela fonctionne !!):

https://mycompany.atlassian.net:443/confluence/rest/api/content/search?os_authType=basic&cql=type=page+and+space+in+(DEV,OPS)+and+title+~+deploy 

Cependant, l'utilisation des espaces ne pas :

https://mycompany.atlassian.net:443/confluence/rest/api/content/search?os_authType=basic&cql=type=page and space in (DEV,OPS) and title ~ deploy 

Pas plus que la version codée:

https://mycompany.atlassian.net:443/confluence/rest/api/content/search?os_authType=basic&cql=type=page%20and%20space%20in%20(DEV,OPS)%20and%20title%20~%20deploy 

Ils ont tous deux res ULT dans:

{ 
    "statusCode": 400, 
    "data": { 
    "authorized": false, 
    "valid": true, 
    "errors": [], 
    "successful": false 
    }, 
    "message": "Could not parse cql : type=page%20and%20space%20in(DEV,OPS)%20and%20title~deploy" 
} 

Basé sur le documentation Je ne vois aucune mention d'avoir besoin d'utiliser le + je ne ai pu Gleen cette base de la discussion qui suit un question on Atlassian Answers.

Les points positifs sont très bien, mais je dois utiliser la recherche floue pour rechercher plusieurs termes tant de choses comme:

title+~+deploy+my+app 

généreront:

"message": "Could not parse cql : type=page%20and%20space%20in(DEV,OPS)%20and%20title~deploy my app" 

et:

title+~+"deploy+my+app" 

Résultats s'afficheront:

"message": "Could not parse cql : type=page%20and%20space%20in(DEV,OPS)%20and%20title~%22deploy my app%22" 

Existe-t-il un moyen de rechercher une chaîne de plusieurs mots pour cette application en nuage?

+0

Avez-vous essayé d'utiliser AND ou OR dans votre requête? 'title + ~ +" déployer OU mon application OR "' – ppasler

+0

@ppasier merci, bonne réflexion. Même résultat, car les guillemets et les espaces ont besoin d'un encodage. –

Répondre

0

Oui, je l'ai vécu aussi et c'est tout à fait exaspérant. Cela ne semble pas bien coder.

Mon contournement consistait à écrire ma propre fonction urlencode. S'il y a une meilleure façon de faire, j'aimerais entendre:

function urlencode() { 
    local convert=$(convertFromAscii "$1") 
    echo ${convert} | sed "s/'/%27/g" | sed "s/\\\/%5C/g" 
} 

function convertFromAscii() { 
    local input=$1 
    local length="${#input}" 
    for ((i = 0; i < length; i++)); do 
     local c="${input:i:1}" 
     case ${c} in 
      [a-zA-Z0-9.~_-+\']) printf "$c" ;; 
      '-') printf "-" ;; 
      ' ') printf "%%20" ;; 
      '!') printf "%%21" ;; 
      '"') printf "%%22" ;; 
      '#') printf "%%23" ;; 
      '$') printf "%%24" ;; 
      '%') printf "%%25" ;; 
      '&') printf "%%26" ;; 
      '(') printf "%%28" ;; 
      ')') printf "%%29" ;; 
      '*') printf "%%2A" ;; 
      '+') printf "%%2B" ;; 
      ',') printf "%%2C" ;; 
      '<') printf "%%3C" ;; 
      '=') printf "%%3D" ;; 
      '>') printf "%%3E" ;; 
      '?') printf "%%3F" ;; 
      '[') printf "%%5B" ;; 
      ']') printf "%%5D" ;; 
     esac 
    done 
} 

appel comme ceci:

urlencode "${JIRA_FILTER_TEXT}"