2016-08-02 216 views
0

我正在使用郵遞員和Javascript查詢Cloud atlassian.net帳戶上的Confluence API。Confluence REST API搜索 - 編碼時編碼CQL查詢時出錯

當我在CQL它爲我的空間的場所使用+(所以這是不工作的授權的問題 - 這個作品!):

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

但是使用空間不:

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

也不編碼版本:

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 

他們都水庫在documentation我看沒有提到需要使用+我只能基於以下一個question on Atlassian Answers的討論gleen這種基於

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

:ULT英寸

的長處都很好,但我需要使用模糊搜索來搜索多個術語所以像:

title+~+deploy+my+app 

會導致:

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

和:

title+~+"deploy+my+app" 

將導致:

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

有沒有辦法爲這個雲應用程序搜索多字字符串?

+0

您是否嘗試過使用AND或OR查詢? 'title +〜+「部署或我的OR應用程序」' – ppasler

+0

@ppasier謝謝,好想法。同樣的結果,因爲引號和空格需要編碼。 –

回答

0

是的,我也經歷過這一點,它相當令人生氣。它似乎沒有正確編碼。

我的解決方法是編寫我自己的urlencode函數。如果有更好的方式來做到這一點,我很想聽到它:

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 
} 

調用它像這樣:

urlencode "${JIRA_FILTER_TEXT}"