Dienstag, 11. Januar 2011

Mit GpsMid gesammelte CellIDs mit Script zu OpenCellID.org senden

Wenn das GPS meines Handys an ist, dann sammelt GpsMid die Cell-ID-Daten. Da der Upload mit der Web-API bei OpenCellID.org ständig Fehlermeldungen bringt oder mit einer Zeitüberschreitung (timeout) abstirbt, habe ich mal die einzelnen API-Funktionen durchprobiert und festgestellt, dass der Upload einzelner Datensätze funktioniert. Schnell war dann folgendes Shellscript geschrieben:
#!/bin/bash

## OpenCellID-ApiKey:
apikey=1234567890abcdefghji

echo "Upload all CellID data to OpenCellID.org"
echo "========================================"
echo "using API-Key: $apikey"

for file in `ls *.txt`;do
  echo "Processing $file ..."
  # for every line in $file 
  for line in $(< $file);do
    # data per line is: lat,lon,mcc,mnc,lac,cellid,
    echo -en '\E[33m '$line' :'; tput sgr0
    # replace the comma by space and output to variable array $celldata
    celldata=( `echo "$line" | sed 's/,/ /g'` )
    if [[ "${celldata[0]}" == "lat" ]];then
      # this is the header line
      echo " header"
    else
      # upload using wget
      mycall=`echo "http://www.opencellid.org/measure/add?key=$apikey&mnc=${celldata[3]}&mcc=${celldata[2]}&lac=${celldata[4]}&cellid=${celldata[5]}&lat=${celldata[0]}&lon=${celldata[1]}"`
      resp=`wget --quiet --output-document=- $mycall`
      # check if upload was OK
      if [[ $resp =~ .*ok.* ]];then
        # Upload is OK, green comment
 resp=`echo $resp | sed 's/.*<res>\(.*\)..res>.*/\1/g'`
        echo -e '\E[32m '$resp; tput sgr0
      else
        # Something is not OK, so print it in red
        # and output $celldata to "failed.txt"
        resp=`echo $resp | sed 's/.*<res>\(.*\)..res>.*/\1/g'`
        echo -e '\E[31m '$resp; tput sgr0
        echo $line >> failed.log
      fi
    fi
  done
  mv $file uploaded/
done
Es ist langsam, nicht an allen Stellen elegant oder kurz und bestimmt nicht bug-frei, jedoch tut es seinen Dienst.

Keine Kommentare:

Kommentar veröffentlichen