Thanks a lot!

I posted my working code here
https://www.mediawiki.org/wiki/API:Client_code/Bash

Kind regards,
Geoffrey De Belie

 ---- On di, 31 jan 2017 11:12:54 +0100 Gergo Tisza <[email protected]> 
wrote ---- 
 > You should use jq --raw-output.
 > On Tue, Jan 31, 2017 at 12:08 AM, geoffreydebelie <[email protected]> 
 > wrote:
 > 
 >  _______________________________________________
 > Mediawiki-api mailing list
 > [email protected]
 > https://lists.wikimedia.org/mailman/listinfo/mediawiki-api
 > Hi everyone,
 >  
 >  I'm trying to login using the MediaWiki API. This works if I copy the token 
 > manually in the code every time again. Using the token from the variable 
 > DOESNT work, but copy pasting the same token into the TOKEN= assignment 
 > (into the source code) DOES work!
 >  
 >  After that, I'm trying to edit a page. I have the same problem with the 
 > edit token. It cannot be read from the variable,  unless I copied the token 
 > manually to the variable in the source code :(
 >  
 >  I know I'm almost there, but the tokens are getting in the way.
 >  
 >  Why doesn't it work when I'm parsing the token from the API? When I 
 > copy-paste the same token into the source code directly it works..
 >  
 >  The token looks the same to me! Is curl getting in the way here? I tried 
 > several things, like dropping the last \ from the token and then passing it 
 > to curl, but to no avail.
 >  
 >  Output of the script when it doesn't work (reading the token from the TOKEN 
 > variable when parsing from the API):
 >  $ ./clientcode.sh
 >  UTF8 check: ☠
 >  Logging into https://nl.wikipedia.org/w/api.php as Smile4ever...
 >  Get login token...
 >    % Total    % Received % Xferd  Average Speed   Time    Time     Time  
 > Current
 >                                   Dload  Upload   Total   Spent    Left  
 > Speed
 >  100   112  100   112    0     0    649      0 --:--:-- --:--:-- --:--:--   
 > 666
 >  {
 >    "batchcomplete": "",
 >    "query": {
 >      "tokens": {
 >        "logintoken": "9b9a82c7ac27cf9573e1c7cb7419cf53589041ec+\\"
 >      }
 >    }
 >  }
 >  Login token is "9b9a82c7ac27cf9573e1c7cb7419cf53589041ec+\\"
 >  -----
 >  Logging in...
 >    % Total    % Received % Xferd  Average Speed   Time    Time     Time  
 > Current
 >                                   Dload  Upload   Total   Spent    Left  
 > Speed
 >  100   302  100   142  100   160    829    935 --:--:-- --:--:-- --:--:--   
 > 958
 >  {
 >    "error": {
 >      "code": "badtoken",
 >      "info": "Invalid CSRF token.",
 >      "*": "See https://nl.wikipedia.org/w/api.php for API usage."
 >    },
 >    "servedby": "mw1288"
 >  }
 >  
 >  Unable to login, is logintoken  
 > "9b9a82c7ac27cf9573e1c7cb7419cf53589041ec+\\" correct?
 >  
 >  ==========================================
 >  
 >  Output of the script when it does work (reading the token from the TOKEN 
 > variable when using a fixed value for the login token):
 >  $ ./clientcode.sh
 >  UTF8 check: ☠
 >  Logging into https://nl.wikipedia.org/w/api.php as Smile4ever...
 >  Get login token...
 >    % Total    % Received % Xferd  Average Speed   Time    Time     Time  
 > Current
 >                                   Dload  Upload   Total   Spent    Left  
 > Speed
 >  100   111  100   111    0     0    642      0 --:--:-- --:--:-- --:--:--   
 > 660
 >  {
 >    "batchcomplete": "",
 >    "query": {
 >      "tokens": {
 >        "logintoken": "7bfac90f99869aeb77fee2646d0022f1589040d3+\\"
 >      }
 >    }
 >  }
 >  Login token is 3e929f9275d81f12a1f7c93e1beec99f589040b4+\
 >  -----
 >  Logging in...
 >    % Total    % Received % Xferd  Average Speed   Time    Time     Time  
 > Current
 >                                   Dload  Upload   Total   Spent    Left  
 > Speed
 >  100   224  100    76  100   148     36     71  0:00:02  0:00:02 --:--:--    
 > 72
 >  {
 >    "clientlogin": {
 >      "status": "PASS",
 >      "username": "Smile4ever"
 >    }
 >  }
 >  Successfully logged in as Smile4ever, STATUS is "PASS"
 >  
 >  Script:
 >  
 >  #!/usr/bin/env bash
 >  
 >  #Needs curl
 >  USERNAME="Smile4ever"
 >  USERPASS="******"
 >  WIKIAPI="https://nl.wikipedia.org/w/api.php";
 >  cookie_jar="wikicj"
 >  #Will store file in wikifile
 >  
 >  echo "UTF8 check: ☠"
 >  #################login
 >  echo "Logging into $WIKIAPI as $USERNAME..."
 >  
 >  ###############
 >  #Login part 1
 >  #printf "%s" "Logging in (1/2)..."
 >  echo "Get login token..."
 >  CR=$(curl -S \
 >          --location \
 >          --retry 2 \
 >          --retry-delay 5\
 >          --cookie $cookie_jar \
 >          --cookie-jar $cookie_jar \
 >          --user-agent "Curl Shell Script" \
 >          --keepalive-time 60 \
 >          --header "Accept-Language: en-us" \
 >          --header "Connection: keep-alive" \
 >          --compressed \
 >          --request "GET" 
 > "${WIKIAPI}?action=query&meta=tokens&type=login&format=json")
 >  
 >  echo "$CR" | jq .
 >  
 >  rm login.json
 >  echo "$CR" > login.json
 >  TOKEN=$(jq '.query.tokens.logintoken' login.json)
 >  #TOKEN="${TOKEN//\"/}" #replace double quote by nothing
 >  
 >  #Remove carriage return!
 >  #printf "%s" "$TOKEN" > token.txt
 >  #TOKEN=$(cat token.txt | sed 's/\r$//')
 >  #TOKEN="$(<token.txt)"
 >  #TOKEN="${TOKEN//\+\\/\+}" #replace +\ by +
 >  
 >  
 >  #echo -n $TOKEN > token.txt
 >  #TOKEN="${TOKEN//\+\\/%2b%5c}" #replace +\ by %2b%5c
 >  #TOKEN="33bf0c310b22a836be6b28905470d3a1589031da+\\"
 >  
 >  #TOKEN="24949330db743d9af74e7e56f2b523725890407b+\\"
 >  if [ "$TOKEN" == "null" ]; then
 >          echo "Getting a login token failed."
 >          exit
 >  else
 >          echo "Login token is $TOKEN"
 >          echo "-----"
 >  fi
 >  
 >  ###############
 >  #Login part 2
 >  echo "Logging in..."
 >  CR=$(curl -S \
 >          --location \
 >          --cookie $cookie_jar \
 >      --cookie-jar $cookie_jar \
 >          --user-agent "Curl Shell Script" \
 >          --keepalive-time 60 \
 >          --header "Accept-Language: en-us" \
 >          --header "Connection: keep-alive" \
 >          --compressed \
 >          --data-urlencode "username=${USERNAME}" \
 >          --data-urlencode "password=${USERPASS}" \
 >          --data-urlencode "rememberMe=1" \
 >          --data-urlencode "logintoken=${TOKEN}" \
 >          --data-urlencode "loginreturnurl=http://google.be"; \
 >          --request "POST" "${WIKIAPI}?action=clientlogin&format=json")
 >  
 >  echo "$CR" | jq .
 >  
 >  STATUS=$(echo $CR | jq '.clientlogin.status')
 >  if [[ $STATUS == *"PASS"* ]]; then
 >          echo "Successfully logged in as $USERNAME, STATUS is $STATUS."
 >          echo "-----"
 >  else
 >          echo "Unable to login, is logintoken ${TOKEN} correct?"
 >          exit
 >  fi
 >  
 >  ###############
 >  #Get edit token
 >  echo "Fetching edit token..."
 >  CR=$(curl -S \
 >          --location \
 >          --cookie $cookie_jar \
 >          --cookie-jar $cookie_jar \
 >          --user-agent "Curl Shell Script" \
 >          --keepalive-time 60 \
 >          --header "Accept-Language: en-us" \
 >          --header "Connection: keep-alive" \
 >          --compressed \
 >          --request "POST" "${WIKIAPI}?action=query&meta=tokens&format=json")
 >  
 >  echo "$CR" | jq .
 >  echo "$CR" > edittoken.json
 >  EDITTOKEN=$(jq '.query.tokens.csrftoken' edittoken.json)
 >  rm edittoken.json
 >  EDITTOKEN="${EDITTOKEN//\"/}" #replace double quote by nothing
 >  #EDITTOKEN="${EDITTOKEN//\+\\/\+}" #replace +\ by +
 >  
 >  if [[ $EDITTOKEN == *"+\\"* ]]; then
 >          echo "Edit token is: $EDITTOKEN"
 >  else
 >          echo "Edit token not set."
 >          exit
 >  fi
 >  
 >  ###############
 >  #Make a test edit
 >  #EDITTOKEN="d55014d69f1a8c821073bb6724aced7658904018+\\"
 >  CR=$(curl -S \
 >          --location \
 >          --cookie $cookie_jar \
 >          --cookie-jar $cookie_jar \
 >          --user-agent "Curl Shell Script" \
 >          --keepalive-time 60 \
 >          --header "Accept-Language: en-us" \
 >          --header "Connection: keep-alive" \
 >          --compressed \
 >          --data-urlencode "title=Gebruiker:Smile4ever/test4" \
 >          --data-urlencode "appendtext={{nocat|2017|01|31}}" \
 >          --data-urlencode "token=${EDITTOKEN}" \
 >          --request "POST" "${WIKIAPI}?action=edit&format=json")
 >  
 >  echo "$CR" | jq .
 >  
 >  Kind regards,
 >  Geoffrey De Belie
 >  
 >  
 >  
 >  
 >  _______________________________________________
 >  Mediawiki-api mailing list
 >  [email protected]
 >  https://lists.wikimedia.org/mailman/listinfo/mediawiki-api
 >  



_______________________________________________
Mediawiki-api mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-api

Reply via email to