Runtastic Massenexport per js

HoneyBadger

Aktiver NGBler
Registriert
7 Sep. 2015
Beiträge
1.913
Hi,

bin vor einiger Zeit auf Garmin umgestiegen und wollte meine alten Runtasticdaten gerne mit rübernehmen. Habe dann mal etwas gegoogelt und bin über zwei Scripte gestolpert.
Das erste lief einen kleinen Moment, hat aber nur einen Teil der Daten geliefert. Das zweite arbeitet zwar, es kommen aber gar keine Daten an. Das Script ist etwas älter, sodass ich vermute, dass die Seite sich in der Zwischenzeit etwas geändert hat.

Weiß jemand, wie man eins der beiden wieder zum Laufen bekommt?

[src=java]var links = []; $('.type > a').each ( function () {
links.push($(this).attr('href'))
} )
setInterval(function () {
if ( !links.length) { return; }
var link = links.shift();
link += '.tcx';
var newFrame = document.createElement('iframe');
document.body.appendChild(newFrame);
newFrame.style = 'width: 1px; height: 1px;';
newFrame.src = link; },
500); [/src]

[src=javascript]$.each(index_data,function(){
$('<iframe/>', {
src: 'https://'+app_config.domain+user.run_sessions_path+this[0]+'.tcx'
}).appendTo('body');
});[/src]
 
ich kenne Runtastic und Co. nicht, aber javascript.

Der zweite Code liest alle "index_data" aus und erstellt daraus einen Iframe, der im body angehängt wird.
"index_data" ist hier aber nicht definiert, wo das herkommt weiß ich also nicht. Ich tippe mal das es eine variable ist, die auf der Runtastic Seite definiert wurde.

Wenn du sagst, "es arbeitet, kommt aber nix an", werden den Fehler in der Console gelogged? Um dem ganzen auf den Grund zu gehen, würde ich mir die hier genutzten Variablen einfach mal ausgeben lassen.

[src=javascript]
$.each(index_data, function(){
console.log('index_data', $(this)); // sollte das einzelne "index_data" element ausgeben
console.log('app_config', app_config); // sollte die gesamte app_config ausgeben, auch "app_config.domain"
console.log('user', user); // sollte die user variable ausgeben, auch "user.run_sessions_path"
});
[/src]


Der erste Code geht ähnlich vor, nutzt aber weniger variablen der Runtastic Seite. Wenn du sagst deine Daten werden nur teilweise geladen, warte einfach mal länger oder ändere die Intervalzeit => die 500 am ende, reduzier mal auf 10. Ich verstehe nicht ganz warum hier über ein Interval gegangen wird aber es wird schon seine Richtigkeit haben.

Je nachdem was für eine Erfahrung du mit javascript hast, sollte die Lösung relativ simpel sein.
Schau dich im Quellcode von Runtastic mal um, such nach ".tcx" das scheinen ja die eigentlichen Datensätze sein. Wenn es sich hier um eine überschaubare Anzahl handelt, kann man die .tcx Dateien ja auch von Hand herunterladen.

Falls es wirklich sehr viele Datensätze sind, muss das zweite script sicher nur minimal angepasst werden.
 
  • Thread Starter Thread Starter
  • #3
Also beim zweiten Script kamen jetzt in einem Testzeitraum 4 von 17 Stück raus.

Hier mal eine exemplarische Fehlermeldung. Im Quelltext finde ich leider keine der benannten .tcx Endungen.

[src=javascript]GET https://www.runtastic.com/de/benutzer/info_entfernt/sportaktivitaeten/info_entfernt_2.tcx net::ERR_INVALID_RESPONSE[/src]

Lief auch nur beim ersten Durchlauf. Kann es evtl. sein, dass die Seite zu schnelle Zugriffe blockt? Das würde den Timeout im ersten Script vielleicht erklären. Der erste Versuch mit dem ersten Script lief mit mehr Resultaten. Bei beiden Scripten ist mir aufgefallen, dass sie nur beim ersten Durchlauf zum Teil funktionierten.
 
Ja, das könnte das Interval erklären, bau doch mal eins im zweiten Script dazwischen.

Was gibt dir denn folgendes script aus?
[src=javascript]
var links = [];
var linksWithExtension = [];

$(index_data).each(() => { // falls ein fehler kommt, nutze $('.type > a').each(() => {
var href = $(this).attr('href');
links.push(href);
linksWithExtension.push(href + '.tcx');
});

console.log('links', links);
console.log('links with extension', linksWithExtension);
[/src]

So wie ich es verstehe, aus dem ersten script, wird die extension ".tcx" einfach angehängt. Also solltest du jetzt in der Log (zweite Ausgabe) deine ".tcx" Files sehen. Theoretisch solltest du jetzt die einzelnen ".tcx" Files, aus dem Log, im Browser öffnen können.
 
  • Thread Starter Thread Starter
  • #5
Bei beiden kommt in unterschiedlicher Länge.

links with extension ["undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx", "undefined.tcx"]
 
auch wenn du, wie von mir kommentiert

[src=javascript]$(index_data).each(() => { [/src]
durch
[src=javascript]$('.type > a').each(() => {[/src]
ersetzt?

dann sollte es eigentlich gehen, wenn das erste script bei gelaufen ist, auch wenn es nicht alles ausgegeben hat.
 
Hö? Was ist denn da los?
Was passiert denn bei folgendem?
[src=javascript]
$('.type > a').each(function() {
console.log($(this).attr('href'));
});
[/src]
Das ist der essentielle Teil des ersten Scripts, wenn du sagst es läuft, theoretisch, dann sollte es auch was ausgeben, was Sinn macht.


Edit:
oh, ganz vergessen deshalb kommt dann undefined.
[src=javascript]
$(index_data).each(function() {
// ....

oder

$('.type > a').each(function(){
// ....
[/src]

sollte also auch gehen, hoffe ich ;)
 
  • Thread Starter Thread Starter
  • #9
Sprich so?

[src=javascript]
var links = [];
var linksWithExtension = [];

$('.type > a').each(function(){
var href = $(this).attr('href');
links.push(href);
linksWithExtension.push(href + '.tcx');
});

console.log('links', links);
console.log('links with extension', linksWithExtension);
[/src]

Hier bekomme ich nun:

Die Meldung "links" /.../.tcx Danach dann noch einmal "links with extension" /.../.tcx

Oder so?

[src=javascript]
var links = [];
var linksWithExtension = [];

$(index_data).each(function() {
var href = $(this).attr('href');
links.push(href);
linksWithExtension.push(href + '.tcx');
});

console.log('links', links);
console.log('links with extension', linksWithExtension);
[/src]

Hier kommt dann quasi die gleiche Meldung nur statt der ewig langen Linkadressen ganz oft "undefined" und "undefined.tcx"

Ich habe nun noch einmal dieses Script mit dem Timeout von 50000 probiert. Ich gehe mal duschen und lasse laufen. Der Rechner ist eh dauernd an. Vielleicht bringt mich das zum Ziel.

[src=javascript]
  • var links = []; $('.type > a').each ( function () {
  • links.push($(this).attr('href'))
  • } )
  • setInterval(function () {
  • if ( !links.length) { return; }
  • var link = links.shift();
  • link += '.tcx';
  • var newFrame = document.createElement('iframe');
  • document.body.appendChild(newFrame);
  • newFrame.style = 'width: 1px; height: 1px;';
  • newFrame.src = link; },
  • 50000);

[/src]

Nachtrag:
Der erhöhte Timeout bringt leider nichts. 5 gehen durch. Dann ist wieder Schluss.

--- [2017-03-30 11:22 CEST] Automatisch zusammengeführter Beitrag ---

Fehler gefunden! Da ist eine "Ich bin kein Roboter" Abfrage verbaut.... :m
 
Zuletzt bearbeitet:
So wie ich es verstehe sind es unter 20 Files. Deshalb würde ich die Daten in ein Array pushen und dann manuell runterladen.
 
  • Thread Starter Thread Starter
  • #11
Ne, waren um die 100. Hab´s nun komplett manuell gemacht. :dozey:
 
Zurück
Oben