name = SPTrans | version = 0.1.0 | accountable = Rogério Schneider | depdency = None
A prefeitura de São Paulo fornece uma API para consulta de posicionamento da frota de ônibus que atende ao transporte público municipal. A API Olho Vivo é de acesso aberto, mediante cadastro do desenvolvedor e suas aplicações.
sptrans
e na tag 20140916_0244_posicao-dl-sptrans-only
. Como o repositório evoluiu para um serviço mais genérico, para outras APIs, seu nome foi alterado para EXT-PubTrans
.Abaixo temos alguns exemplos de uso da API Olho Vivo.
Endereço principal da API. Pode mudar a rota /v0 variando o número de acordo com a versão da API.
http://api.olhovivo.sptrans.com.br/v0
É preciso exportar o token da sua aplicação antes de poder reproduzir os comandos dos exemplos abaixo. Todos os exemplos utilizam a variável de ambiente $TOKEN para ler o valor correto da chave de acesso.
export TOKEN=<token_da_sua_app>
Antes de consultar a API é preciso iniciar um processo de autenticação. Após o POST de login é preciso gerenciar corretamente os cookies da sessão HTTP para que a API responda corretamente.
curl -sv -X POST -d '' -b /tmp/cookie-jar.txt -c /tmp/cookie-jar.txt "http://api.olhovivo.sptrans.com.br/v0/Login/Autenticar?token=$TOKEN" > POST /v0/Login/Autenticar?token=$TOKEN HTTP/1.1 > User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3 > Host: api.olhovivo.sptrans.com.br > Accept: */* > Content-Length: 0 > Content-Type: application/x-www-form-urlencoded > < HTTP/1.1 200 OK < Cache-Control: no-cache < Pragma: no-cache < Content-Type: application/json; charset=utf-8 < Expires: -1 < Server: Microsoft-IIS/7.5 < X-AspNet-Version: 4.0.30319 < Set-Cookie: apiCredentials=2FCC66D5E42C11C64366D96FE275E5BF2B4B1C93E8A3FF7E15437CA5FF366DF0A7B351178CA1D448A2161A636E396DC833AFBB723119A22D3F169233175DC949AB7C641B171F3284227C33A4BD0B9C5DBEF04F70368ED308D0F3502866BDCB9F93FC74F8E3323AB44081770BDBAAADB7447951D6EEDC69B14301B4A0A56C9B54D72A727F0C3E71252D49BC3954E13BE8C328D91A2D42E95AD904B4EDD50B7278026F5CEA4618DBCF325DE9ABC11FC958BDF65FBD210121BFF07AAF36F56CAE8E189C3872BAAA4F74AD011505589EA9EC; path=/; HttpOnly < X-Powered-By: ASP.NET < Date: Sat, 06 Sep 2014 07:48:04 GMT < Content-Length: 4 < true
Retorna códigos de linhas a partir da pesquisa de um termo.
curl -sv -b /tmp/cookie-jar.txt -c /tmp/cookie-jar.txt "http://api.olhovivo.sptrans.com.br/v0/Linha/Buscar?termosBusca=Liberdade" | jq . > GET /v0/Linha/Buscar?termosBusca=Liberdade HTTP/1.1 > User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3 > Host: api.olhovivo.sptrans.com.br > Accept: */* > Cookie: apiCredentials=2FCC66D5E42C11C64366D96FE275E5BF2B4B1C93E8A3FF7E15437CA5FF366DF0A7B351178CA1D448A2161A636E396DC833AFBB723119A22D3F169233175DC949AB7C641B171F3284227C33A4BD0B9C5DBEF04F70368ED308D0F3502866BDCB9F93FC74F8E3323AB44081770BDBAAADB7447951D6EEDC69B14301B4A0A56C9B54D72A727F0C3E71252D49BC3954E13BE8C328D91A2D42E95AD904B4EDD50B7278026F5CEA4618DBCF325DE9ABC11FC958BDF65FBD210121BFF07AAF36F56CAE8E189C3872BAAA4F74AD011505589EA9EC > < HTTP/1.1 200 OK < Cache-Control: no-cache < Pragma: no-cache < Content-Type: application/json; charset=utf-8 < Expires: -1 < Server: Microsoft-IIS/7.5 < X-AspNet-Version: 4.0.30319 < X-Powered-By: ASP.NET < Date: Sat, 06 Sep 2014 07:56:43 GMT < Content-Length: 663 < [ { "CodigoLinha": 692, "Circular": true, "Letreiro": "2123", "Sentido": 1, "Tipo": 10, "DenominacaoTPTS": "METRÔ LIBERDADE", "DenominacaoTSTP": "VILA MEDEIROS", "Informacoes": null }, { "CodigoLinha": 33460, "Circular": true, "Letreiro": "2123", "Sentido": 2, "Tipo": 10, "DenominacaoTPTS": "METRÔ LIBERDADE", "DenominacaoTSTP": "VILA MEDEIROS", "Informacoes": null }, { "CodigoLinha": 693, "Circular": true, "Letreiro": "2127", "Sentido": 1, "Tipo": 10, "DenominacaoTPTS": "METRÔ LIBERDADE", "DenominacaoTSTP": "JD. BRASIL", "Informacoes": null }, { "CodigoLinha": 33461, "Circular": true, "Letreiro": "2127", "Sentido": 2, "Tipo": 10, "DenominacaoTPTS": "METRÔ LIBERDADE", "DenominacaoTSTP": "JD. BRASIL", "Informacoes": null } ]
Retorna códigos de paradas a partir da pesquisa de um termo.
curl -sv -b /tmp/cookie-jar.txt -c /tmp/cookie-jar.txt "http://api.olhovivo.sptrans.com.br/v0/Parada/Buscar?termosBusca=Pacaembu" | jq . > GET /v0/Parada/Buscar?termosBusca=Pacaembu HTTP/1.1 > User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3 > Host: api.olhovivo.sptrans.com.br > Accept: */* > Cookie: apiCredentials=2FCC66D5E42C11C64366D96FE275E5BF2B4B1C93E8A3FF7E15437CA5FF366DF0A7B351178CA1D448A2161A636E396DC833AFBB723119A22D3F169233175DC949AB7C641B171F3284227C33A4BD0B9C5DBEF04F70368ED308D0F3502866BDCB9F93FC74F8E3323AB44081770BDBAAADB7447951D6EEDC69B14301B4A0A56C9B54D72A727F0C3E71252D49BC3954E13BE8C328D91A2D42E95AD904B4EDD50B7278026F5CEA4618DBCF325DE9ABC11FC958BDF65FBD210121BFF07AAF36F56CAE8E189C3872BAAA4F74AD011505589EA9EC > < HTTP/1.1 200 OK < Cache-Control: no-cache < Pragma: no-cache < Content-Type: application/json; charset=utf-8 < Expires: -1 < Server: Microsoft-IIS/7.5 < Set-Cookie: apiCredentials=27F85582A2625CF61095A99B3CBCF08EA6AE4EB9EA44FA370077D7EAB1D359E1FB18432C7D679A8FFE93C19C7FC7961AF744FFE2986B0CDC0A47484E0DDEEA6D9769F13246F5F6E48A8DF1CA23B36DC97DE4ADA4E232BDD245FF5E048D9780EF5DC296A86C7B001DFE99D6E8E35EC7CA11EB454D02A4E2A75BE5CCF7224A408C63BC7234D0BB5015DAC054C19746F252C1E6DCED90A70C5CA6A28C49AEBFF0E99C4EC307D2845A7FF5535CFB1EE960FA759F4F05F928D69F7687643384DED60A0D887DCC00980154913962DDD4167977; path=/; HttpOnly < X-AspNet-Version: 4.0.30319 < X-Powered-By: ASP.NET < Date: Sat, 06 Sep 2014 08:07:46 GMT < Content-Length: 275 < [ { "CodigoParada": 700016791, "Nome": "PACAEMBU B/C", "Endereco": "R FRANCISCO ESTACIO FORTES/ AV PACAEMBU", "Latitude": -23.532068, "Longitude": -46.660957 }, { "CodigoParada": 700016792, "Nome": "PACAEMBU C/B", "Endereco": "AV PACAEMBU/ R TUPI", "Latitude": -23.531864, "Longitude": -46.660859 } ]
JSON com todos os corredores será salvo no arquivo data/paradas-por-corredor.txt.
for x in $(seq 11) do echo "- Corredor $x" curl -sv -b /tmp/cookie-jar.txt -c /tmp/cookie-jar.txt "http://api.olhovivo.sptrans.com.br/v0/Parada/BuscarParadasPorCorredor?codigoCorredor=$x" \ | jq . echo done | tee data/paradas-por-corredor.txt
Lista os corredores inteligentes.
curl -sv -b /tmp/cookie-jar.txt -c /tmp/cookie-jar.txt "http://api.olhovivo.sptrans.com.br/v0/Corredor" | jq . > GET /v0/Corredor HTTP/1.1 > User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3 > Host: api.olhovivo.sptrans.com.br > Accept: */* > Cookie: apiCredentials=2E423A1C7F3FE250369AC103F20088EB86A96B537B12800501F1A7958D72DD0DCF4E1FA5565C97EA39940C25143C5426951DCE46D355882EB418484D5F75EF1418854E023CB05B5904671AB9A9A3FB70867CDB7573B8F86ECA803615A101A9CE2D0A6C52D801C23B43A27605136CD458EDA914FFAE8AF94A907C93FB63027D4A3DCAE8FA03867399481A4DC6FCC68F4AE59EC51059739909C883AF2C15ABAC0EF2B8E9C90DBDBC62C700D1DE5A3A6C5023435E983C99AF91EF0A234AC18394F13742670249B93E96C21A0ED2DDA7BC98 > < HTTP/1.1 200 OK < Cache-Control: no-cache < Pragma: no-cache < Content-Type: application/json; charset=utf-8 < Expires: -1 < Server: Microsoft-IIS/7.5 < X-AspNet-Version: 4.0.30319 < X-Powered-By: ASP.NET < Date: Sat, 06 Sep 2014 08:21:32 GMT < Content-Length: 364 < [ { "CodCot": 0, "CodCorredor": 8, "Nome": "Campo Limpo" }, { "CodCot": 0, "CodCorredor": 9, "Nome": "Expresso Tiradentes" }, { "CodCot": 0, "CodCorredor": 3, "Nome": "Inajar de Souza" }, { "CodCot": 0, "CodCorredor": 7, "Nome": "Parelheiros" }, { "CodCot": 0, "CodCorredor": 1, "Nome": "Pirituba" }, { "CodCot": 0, "CodCorredor": 2, "Nome": "Santo Amaro" }, { "CodCot": 0, "CodCorredor": 10, "Nome": "Paes de Barros" } ]
Retorna a posição dos veículos que estão atendendo a uma determinada linha.
Este é o serviço mais importante pois fornece as coordenadas de posicionamento dos veículos em serviço.
curl -sv -b /tmp/cookie-jar.txt -c /tmp/cookie-jar.txt "http://api.olhovivo.sptrans.com.br/v0/Posicao?codigoLinha=33461" | jq . > GET /v0/Posicao?codigoLinha=33461 HTTP/1.1 > User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3 > Host: api.olhovivo.sptrans.com.br > Accept: */* > Cookie: apiCredentials=2E423A1C7F3FE250369AC103F20088EB86A96B537B12800501F1A7958D72DD0DCF4E1FA5565C97EA39940C25143C5426951DCE46D355882EB418484D5F75EF1418854E023CB05B5904671AB9A9A3FB70867CDB7573B8F86ECA803615A101A9CE2D0A6C52D801C23B43A27605136CD458EDA914FFAE8AF94A907C93FB63027D4A3DCAE8FA03867399481A4DC6FCC68F4AE59EC51059739909C883AF2C15ABAC0EF2B8E9C90DBDBC62C700D1DE5A3A6C5023435E983C99AF91EF0A234AC18394F13742670249B93E96C21A0ED2DDA7BC98 > < HTTP/1.1 200 OK < Cache-Control: no-cache < Pragma: no-cache < Content-Type: application/json; charset=utf-8 < Expires: -1 < Server: Microsoft-IIS/7.5 < X-AspNet-Version: 4.0.30319 < X-Powered-By: ASP.NET < Date: Sat, 06 Sep 2014 08:32:00 GMT < Content-Length: 153 < { "hr": "05:32", "vs": [ { "p": "22850", "a": true, "py": -23.516589875, "px": -46.604841875000005 }, { "p": "22822", "a": true, "py": -23.554221000000002, "px": -46.6331835 } ] }
Dada uma linha, é informada a previsão de chegada e posicionamento atual dos veículos que a atendem.
curl -sv -b /tmp/cookie-jar.txt -c /tmp/cookie-jar.txt "http://api.olhovivo.sptrans.com.br/v0/Previsao/Linha?codigoLinha=33461" | jq . > GET /v0/Previsao/Linha?codigoLinha=33461 HTTP/1.1 > User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3 > Host: api.olhovivo.sptrans.com.br > Accept: */* > Cookie: apiCredentials=2E423A1C7F3FE250369AC103F20088EB86A96B537B12800501F1A7958D72DD0DCF4E1FA5565C97EA39940C25143C5426951DCE46D355882EB418484D5F75EF1418854E023CB05B5904671AB9A9A3FB70867CDB7573B8F86ECA803615A101A9CE2D0A6C52D801C23B43A27605136CD458EDA914FFAE8AF94A907C93FB63027D4A3DCAE8FA03867399481A4DC6FCC68F4AE59EC51059739909C883AF2C15ABAC0EF2B8E9C90DBDBC62C700D1DE5A3A6C5023435E983C99AF91EF0A234AC18394F13742670249B93E96C21A0ED2DDA7BC98 > < HTTP/1.1 200 OK < Cache-Control: no-cache < Pragma: no-cache < Content-Type: application/json; charset=utf-8 < Expires: -1 < Server: Microsoft-IIS/7.5 < Set-Cookie: apiCredentials=3E8646703FFE5CDFF03C05CED150E456D3914E64FFDC5607512B73DAC07D129F974DFB96F799F877B30BD12CDF85CAA45A9B3E89C682C87C087F6E8E12EACD7269E601867D252DDFCC2484FE571923366FCE4FD57B9D6C11A52B44BADA62088A84CF9514D10440CD3CBF6E6C9A400CAE5BBC48B9D5EC9B9CFF5B8A823F3C4155E1C7E40CBB711C58425C0E6DBCF90E0D9A48BC026DE30F7FC07534BF59ECBA76665E2181B6676F1CAC87DCE1B42A13A131479EB75943DA3FD515DD30650372891957EB57C59BAACB3839B91333A44803; path=/; HttpOnly < X-AspNet-Version: 4.0.30319 < X-Powered-By: ASP.NET < Date: Sat, 06 Sep 2014 08:47:13 GMT < Content-Length: 1596 < { "hr": "05:47", "ps": [ { "cp": 910003786, "np": null, "py": -23.49562, "px": -46.585261, "vs": [ { "p": "22822", "t": "06:01", "a": true, "py": -23.525668333333336, "px": -46.611473333333336 } ] }, { "cp": 910003782, "np": null, "py": -23.49503, "px": -46.580862, "vs": [ { "p": "22822", "t": "06:02", "a": true, "py": -23.525668333333336, "px": -46.611473333333336 } ] }, { "cp": 910003778, "np": null, "py": -23.495193, "px": -46.578781, "vs": [ { "p": "22822", "t": "06:02", "a": true, "py": -23.525668333333336, "px": -46.611473333333336 } ] }, { "cp": 940004421, "np": null, "py": -23.496566, "px": -46.575964, "vs": [ { "p": "22822", "t": "06:03", "a": true, "py": -23.525668333333336, "px": -46.611473333333336 } ] }, { "cp": 940004358, "np": null, "py": -23.494704, "px": -46.5756, "vs": [ { "p": "22822", "t": "06:03", "a": true, "py": -23.525668333333336, "px": -46.611473333333336 } ] }, { "cp": 940004359, "np": null, "py": -23.48946, "px": -46.57264, "vs": [ { "p": "22822", "t": "06:05", "a": true, "py": -23.525668333333336, "px": -46.611473333333336 } ] }, { "cp": 940004032, "np": null, "py": -23.489418, "px": -46.570809, "vs": [ { "p": "22822", "t": "06:05", "a": true, "py": -23.525668333333336, "px": -46.611473333333336 } ] }, { "cp": 940003891, "np": null, "py": -23.489401, "px": -46.56986, "vs": [ { "p": "22822", "t": "06:06", "a": true, "py": -23.525668333333336, "px": -46.611473333333336 } ] }, { "cp": 910003784, "np": "", "py": -23.494814, "px": -46.583202, "vs": [ { "p": "22822", "t": "06:01", "a": true, "py": -23.525668333333336, "px": -46.611473333333336 } ] }, { "cp": 9412668, "np": "", "py": -23.490836, "px": -46.574455, "vs": [ { "p": "22822", "t": "06:04", "a": true, "py": -23.525668333333336, "px": -46.611473333333336 } ] }, { "cp": 800016588, "np": "SÉ/BOMBEIROS", "py": -23.550694, "px": -46.631906, "vs": [] } ] }
Dada uma parada, é informada a previsão de chegada e posicionamento atual dos veículos que a atendem.
Este serviço foi utilizado em um script mais elaborado para descobrir a listagem completa de linhas, uma vez que apenas a listagem completa de paradas é fornecida.
curl -sv -b /tmp/cookie-jar.txt -c /tmp/cookie-jar.txt "http://api.olhovivo.sptrans.com.br/v0/Previsao/Parada?codigoParada=700016792" | jq . > GET /v0/Previsao/Parada?codigoParada=700016792 HTTP/1.1 > User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3 > Host: api.olhovivo.sptrans.com.br > Accept: */* > Cookie: apiCredentials=E87C1CA3864AF6323A05D598B01AF2539D58028DF6E9D494759AB93B264D27C80ABC787963640240B3D7065356DF49991474998102EC4625D1CFD156B0BD80A0DEDCD3EDE83A466A9CCC82168D38198D194EFEA4D6AF6691C604AC4096C6CFBF2DDC267959DC8752EA8937A888849DF7F51088BECA910E2285CA94CA37E6A9170B89B7D8BB2DC25AF43CDE2032C76423D7BD3E19727FB407C6C7FFDAC6ED6A64262012C8CB87428819E3BF08FC68634DC4AE2DE591C03AE7DADE86883E933A7214991747E9EF2499C909BAE6449ADF9D > < HTTP/1.1 200 OK < Cache-Control: no-cache < Pragma: no-cache < Content-Type: application/json; charset=utf-8 < Expires: -1 < Server: Microsoft-IIS/7.5 < X-AspNet-Version: 4.0.30319 < X-Powered-By: ASP.NET < Date: Sat, 06 Sep 2014 08:50:22 GMT < Content-Length: 861 < { "hr": "05:50", "p": { "cp": 700016792, "np": "PACAEMBU C/B", "py": -23.531864, "px": -46.660859, "l": [ { "c": "8696-41", "cl": 33218, "sl": 2, "lt0": "PCA.RAMOS DE AZEVEDO", "lt1": "JARAGUA", "qv": 1, "vs": [ { "p": "11695", "t": "05:55", "a": false, "py": -23.538629999999998, "px": -46.64681166666666 } ] }, { "c": "8594-10", "cl": 33200, "sl": 2, "lt0": "PCA.RAMOS DE AZEVEDO", "lt1": "CID. D'ABRIL", "qv": 1, "vs": [ { "p": "11816", "t": "05:55", "a": true, "py": -23.539899999999996, "px": -46.64444 } ] }, { "c": "875A-10", "cl": 609, "sl": 1, "lt0": "PERDIZES (VIA ARATÃS)", "lt1": "AEROPORTO", "qv": 2, "vs": [ { "p": "62214", "t": "06:02", "a": true, "py": -23.553359999999998, "px": -46.66026166666667 }, { "p": "62008", "t": "06:34", "a": true, "py": -23.618095, "px": -46.66196166666667 } ] }, { "c": "874T-10", "cl": 307, "sl": 1, "lt0": "LAPA", "lt1": "IPIRANGA", "qv": 1, "vs": [ { "p": "51645", "t": "06:16", "a": true, "py": -23.588033333333335, "px": -46.63051666666667 } ] } ] } }
Dada uma parada e uma linha, é informada a previsão de chegada e posicionamento atual dos veículos que as atendem.
curl -sv -b /tmp/cookie-jar.txt -c /tmp/cookie-jar.txt "http://api.olhovivo.sptrans.com.br/v0/Previsao?codigoParada=700016792&codigoLinha=307" | jq . > GET /v0/Previsao?codigoParada=700016792&codigoLinha=307 HTTP/1.1 > User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3 > Host: api.olhovivo.sptrans.com.br > Accept: */* > Cookie: apiCredentials=E87C1CA3864AF6323A05D598B01AF2539D58028DF6E9D494759AB93B264D27C80ABC787963640240B3D7065356DF49991474998102EC4625D1CFD156B0BD80A0DEDCD3EDE83A466A9CCC82168D38198D194EFEA4D6AF6691C604AC4096C6CFBF2DDC267959DC8752EA8937A888849DF7F51088BECA910E2285CA94CA37E6A9170B89B7D8BB2DC25AF43CDE2032C76423D7BD3E19727FB407C6C7FFDAC6ED6A64262012C8CB87428819E3BF08FC68634DC4AE2DE591C03AE7DADE86883E933A7214991747E9EF2499C909BAE6449ADF9D > < HTTP/1.1 200 OK < Cache-Control: no-cache < Pragma: no-cache < Content-Type: application/json; charset=utf-8 < Expires: -1 < Server: Microsoft-IIS/7.5 < X-AspNet-Version: 4.0.30319 < X-Powered-By: ASP.NET < Date: Sat, 06 Sep 2014 08:52:03 GMT < Content-Length: 245 < { "hr": "05:52", "p": { "cp": 700016792, "np": "PACAEMBU C/B", "py": -23.531864, "px": -46.660859, "l": [ { "c": "874T-10", "cl": 307, "sl": 1, "lt0": "LAPA", "lt1": "IPIRANGA", "qv": 1, "vs": [ { "p": "51645", "t": "06:16", "a": true, "py": -23.581475, "px": -46.63818833333333 } ] } ] } }
Foi criado um conjunto de scripts que utiliza uma série de serviços da API Olho Vivo de maneira a manter uma base local atualizada com as posições de veículos fornecidas por GPS.
O propósito de se manter uma base local atualizada é o da utilização desses dados de posicionamento para simulação e análise de movimentação com embasamento em padrões reais de deslocamento urbano.
Para que fosse possível coletar e manter uma amostra de dados de posicionamento, um conjunto de scripts foi desenvolvido. Trata-se de um script de descoberta de linhas, chamado update-linhas.sh
e de um script de download em paralelo, que coleta as posições de veículos em cada linha, chamado posicao-dl.rb
.
Encontra-se no repositório Git do LAC e faz o seguinte processo:
posicao-dl.rb
e é ele o responsável pelo download em massa das posições GPS fornecidas pela API, linha por linha.Exemplo de execução contínua do script de descoberta de linhas, via cron:
# Executa a cada quatro horas 0 */4 * * * user cd /home/user/sptrans; ./update-linhas.sh <token_da_sua_app>
Encontra-se no repositório Git do LAC e faz o seguinte processo:
update-linhas.sh
, salva em data/linhas.txt, e faz a consulta, linha por linha, das posições de veículos em atividade em cada linha.Exemplo de execução contínua do script de download de posicionamento de veículos, via cron:
# Executa a cada minuto * * * * * user cd /home/user/sptrans; /usr/bin/unbuffer /home/user/.rvm/gems/ruby-2.1.2@sptrans/wrappers/ruby posicao-dl.rb -t <token_da_sua_app> -d /path/to/data/pos -l data/linhas.txt -w 50
O script update-linhas.sh
não apresenta maiores dificuldades em seu uso. Basta executar a partir da raiz do repositório Git. É um Bash e é suportado em qualquer distribuição Linux. Foi testado no Ubuntu.
Note que o script update-linhas.sh
, ao final da sua execução, cria um commit no Git com o arquivo data/linhas.txt atualizado. Nada é removido do linhas.txt já existente no repositório, apenas as linhas novas descobertas é que serão adicionadas, sem duplicação.
cd /home/user/sptrans ./update-linhas.sh <token_da_sua_app>
O script posicao-dl.rb
exige um setup do ambiente local pois se trata de um programa Ruby um pouco mais complexo. Felizmente o instrumental para gerenciar dependências de pacotes na linguagem Ruby é bem poderoso. Basta seguir os passos abaixo e deverá ser possível executar o script em qualquer máquina Linux ou Mac:
curl -sSL https://get.rvm.io | bash -s stable
rvm install ruby-2.1.2
cd / cd /home/user/sptrans rvm current (deve retornar: ruby-2.1.2@sptrans)
bundle
posicao-dl.rb
../posicao-dl.rb -h
Usage: ./posicao-dl.rb [options] Examples: ./posicao-dl.rb -t <token_da_sua_app> -d data/pos -l data/linhas.txt -w 5 ./posicao-dl.rb -t <token_da_sua_app> -d data/pos -l data/linhas.txt -v ./posicao-dl.rb -t <token_da_sua_app> -d data/pos -l data/linhas.txt -vvv ./posicao-dl.rb -t <token_da_sua_app> -d data/pos -l data/linhas.txt -w 100 -vvv Options: -t, --token Olho Vivo API token. -d, --download_dir Download dir to store jsons with buses' GPS coordinates. -l, --routes_file File containing routes to query for buses' positioning. -w, --threads_num Number of worker threads for parallel download. (default: 5) -v, --verbose Verbose mode. -h, --help Display this help message.
Os arquivos salvos pelo script posicao-dl.rb
seguem o padrão abaixo.
/path/to/data/pos/p_<id_do_veiculo>.json /path/to/data/pos/p_1337.json
{ "p": "1337", "d": [ { "t": 1410109464, "a": true, "x": -46.738139000000004, "y": -23.454661 }, { "t": 1410109525, "a": true, "x": -46.738139000000004, "y": -23.454661 } ] }
p
é o identificador de um veículo, também está presente no nome do arquivo. Os arquivos são salvos agrupando todas as posições coletadas para um determinado veículo.
d
é uma lista de posições coletadas. Tende a crescer conforme a coleta via script é executada.
t
é o timestamp (seconds from the epoch / unix timestamp) da data da coleta de uma determinada posição GPS via API. A data expressa o momento da coleta na API, já que a API não informa a data da coleta no veículo.
a
true ou false. Não ficou claro pela documentação da API o que exatamente este campo significa. Talvez indique se o veículo estava parado ou em movimento no momento da coleta.
x
e y
são as coordenadas informadas pela API.
Em um primeiro acompanhamento, os seguintes valores aproximados foram medidos:
wc -l data/linhas.txt 2572 data/linhas.txt
find data/pos -type f | wc -l 14423
# Total em três dias de operação cat *json | jq '.d[].t' | wc -l 16585174
# Total em três dias de operação du -sm data/pos 1025 data/pos
Dados coletados utilizando um computador pessoal, desktop, com sistema operacional Linux Ubuntu 12.04 (32 bits), com CPU Core 2 DUO de 3GHz, com 4GB de RAM e discos SATA simples (sem RAID). Conexão internet doméstica, de 10mbps.