TheMovieDataBase

F

FabianL

Gast
Hallo Leute,
also ich weiß echt nicht was ich noch machen soll. Ich möchte von tmdb einfach daten erhalten. Dazu verwende ich folgendes:
Code:
var genrearray=new Array();
var wertearray=new Array();
var id=0;
var i=0;
var abscount=0;
var data;
function getGenre(genre,number){
genrearray=genre.split(';');
wertearray=number;
    for(var x=0;x<genrearray.length-1;x++)
    {        
        switch(genrearray[x]){
            case 'Action':
                id=28;
                break;
            case 'Action & Adventure':
                id=10759;
                break;
            case 'Adventure':
                id=12;
                break;
            case 'Animation':
                id=16;
                break;
            case 'British':
                id=10760;
                break;
            case 'Comedy':
                id=35;
                break;
            case 'Crime':
                id=80;
                break;
            case 'Disaster':
                id=105;
                break;
            case 'Documentary':
                id=99;
                break;
            case 'Drama':
                id=18;
                break;
            case 'Eastern':
                id=82;
                break;
            case 'Education':
                id=10761;
                break;
            case 'Erotic':
                id=2916;
                break;
            case 'Family':
                id=10751;
                break;
            case 'Fan Film':
                id=10750;
                break;
            case 'Fantasy':
                id=14;
                break;
            case 'Film Noir':
                id=10753;
                break;
            case 'Foreign':
                id=10769;
                break;
            case 'History':
                id=36;
                break;
            case 'Holiday':
                id=10595;
                break;
            case 'Horror':
                id=27;
                break;
            case 'Indie':
                id=10756;
                break;
            case 'Kids':
                id=10762;
                break;
            case 'Music':
                id=10402;
                break;
            case 'Musical':
                id=22;
                break;
            case 'Mystery':
                id=9648;
                break;
            case 'Neo-noir':
                id=10754;
                break;
            case 'News':
                id=10763;
                break;
            case 'Reality':
                id=10764;
                break;
            case 'Road Movie':
                id=1115;
                break;
            case 'Romance':
                id=10749;
                break;
            case 'Sci-Fi & Fantasy':
                id=10765;
                break;
            case 'Science Fiction':
                id=878;
                break;
            case 'Short':
                id=10755;
                break;
            case 'Soap':
                id=10766;
                break;
            case 'Sport':
                id=9805;
                break;
            case 'Sports Film':
                id=10757;
                break;
            case 'Suspense':
                id=10748;
                break;
            case 'TV movie':
                id=10770;
                break;
            case 'Talk':
                id=10767;
                break;
            case 'Thriller':
                id=53;
                break;
            case 'War':
                id=10752;
                break;
            case 'War & Politics':
                id=10768;
                break;
            case 'Western':
                id=37;
                break;
        }       
		$.ajax({
            url : 'http://api.themoviedb.org/2.1/Movie.browse/en-US/json/API_KEY(von mir weg gemacht)?order_by=rating&order=desc&genres='+id+'&min_votes=5&page=1&per_page=10',
            async: false,
            jsonpCallback: 'jsonpCallback'+id,
            contentType: 'application/jsonp',
            dataType: 'jsonp',
            success : function(data) { 
				 	for(i=abscount; i<(parseInt(wertearray[x])+parseInt(abscount));i++)
						{	
						alert(i);										
                    $("#poster"+i).html('<img src='+data[0].posters[0].image.url+'/>');
                    $("#filmname"+i).html(data[0].name);
                    $("#rating"+i).html(data[0].rating);
                    $("#overview"+i).html(data[0].overview);
                    $("#genre"+i).html(id);					
						} 									
				abscount=i;		
            }
						
        });	

		
    }
}
So. Der Funktion getGenre wird folgendes übermittelt :
Action;Horror;Comdey;
2,1,2
Ich bekomme immer folgende Fehler:
Resource interpreted as Script but transferred with MIME type text/json:
Merkwürdig ist dass wenn ich
Code:
x<genrearray.length-1
auf -2 setze lädt er die Daten (wenn auch falsche).
Bitte helft mir. Glaube es hat was mit dem ajax Befehl zu tun.
Danke
 
F

FabianL

Gast
Danke erstmal für die schnelle Antwort. Ich hoffe ich bekomme das heute noch hin mit eurer Hilfe...kann nicht aufhören sonst:p
Code:
jsonpCallback27([{"score":null,"popularity":3,"translated":true,"adult":false,"language":"en","original_name":"Bride of Frankenstein","name":"Bride of Frankenstein","alternative_name":"Frankensteins Rückkehr","movie_type":"movie","id":229,"imdb_id":"tt0026138","url":"http://www.themoviedb.org/movie/229","votes":5,"rating":9.3,"runtime":75,"certification":"PG","overview":"Bride of Frankenstein begins where James Whale's Frankenstein from 1931 ended. Dr. Frankenstein has not been killed as previously portrayed and now he wants to get away from the mad experiments. Yet when his wife is kidnapped by his creation, Frankenstein agrees to help him create a new monster, this time a woman.","released":"1935-04-22","posters":[{"image":{"type":"poster","size":"thumb","height":186,"width":92,"url":"http://cf2.imgobject.com/t/p/w92/O1DQDfvuLpuAbNKjxX1pxUxmFD.jpg","id":"4ea5d1474f13c137cc00047d"}},{"image":{"type":"poster","size":"w154","height":312,"width":154,"url":"http://cf2.imgobject.com/t/p/w154/O1DQDfvuLpuAbNKjxX1pxUxmFD.jpg","id":"4ea5d1474f13c137cc00047d"}},{"image":{"type":"poster","size":"cover","height":375,"width":185,"url":"http://cf2.imgobject.com/t/p/w185/O1DQDfvuLpuAbNKjxX1pxUxmFD.jpg","id":"4ea5d1474f13c137cc00047d"}}
Habe jetzt nicht alles sondern nur einen Ausschnitt :) sollte aber reichen
 

Evil-Devil

Top Contributor
Wird das jsonpCallback27 wirklich so mitgeliefert? Sieht sehr komisch aus.

HTML:
jsonpCallback27(
[{	
	"score":null,
	"popularity":3,
	"translated":true,
	"adult":false,
	"language":"en",
	"original_name":"Bride of Frankenstein",
	"name":"Bride of Frankenstein",
	"alternative_name":"Frankensteins Rückkehr",
	"movie_type":"movie",
	"id":229,
	"imdb_id":"tt0026138",
	"url":"http://www.themoviedb.org/movie/229",
	"votes":5,
	"rating":9.3,
	"runtime":75,
	"certification":"PG",
	"overview":"Bride of Frankenstein begins where James Whale's Frankenstein from 1931 ended. Dr. Frankenstein has not been killed as previously portrayed and now he wants to get away from the mad experiments. Yet when his wife is kidnapped by his creation, Frankenstein agrees to help him create a new monster, this time a woman.",
	"released":"1935-04-22",
	"posters":[{
			"image":{
				"type":"poster",
				"size":"thumb",
				"height":186,
				"width":92,
				"url":"http://cf2.imgobject.com/t/p/w92/O1DQDfvuLpuAbNKjxX1pxUxmFD.jpg",
				"id":"4ea5d1474f13c137cc00047d"
				}
			},
			{
			"image":{
				"type":"poster",
				"size":"w154",
				"height":312,
				"width":154,
				"url":"http://cf2.imgobject.com/t/p/w154/O1DQDfvuLpuAbNKjxX1pxUxmFD.jpg",
				"id":"4ea5d1474f13c137cc00047d"
				}
			},
			{
			"image":{
				"type":"poster",
				"size":"cover",
				"height":375,
				"width":185,
				"url":"http://cf2.imgobject.com/t/p/w185/O1DQDfvuLpuAbNKjxX1pxUxmFD.jpg",
				"id":"4ea5d1474f13c137cc00047d"
			}
		}

Da fehlt irgendwie der letzte Teil oder der wurde dir im Debugger nicht ausgegeben.
Jedenfalls solltest ganz einfach auf die Daten zugreifen können.

hast schon ein
HTML:
console.log(data[0].name)
probiert? (Setzt FIrebug o.ä. voraus)
 
F

FabianL

Gast
Ok wir sind schon auf einen guten Weg. Also die JSON datei hab ich wie gesagt etwas gekürzt (nicht vollständig). Sry wenn ich diese evtl an einer falschen Stelle abgeschnitten habe.

Wenn ich das Ganze nun mit console.log mache wird mir folgendes ausgegeben:

Code:
Resource interpreted as Script but transferred with MIME type text/plain: "http://www.calculando.de/config/config.json". filme.php:9
Resource interpreted as Script but transferred with MIME type text/json: "http://api.themoviedb.org/2.1/Movie.browse/en-US/json/b42ec605e4cc92c9847cf08fb8acdca9?order_by=rating&order=desc&genres=35&min_votes=5&page=1&per_page=10&callback=jsonpCallback35&_=1344360477313". jquery-1.6.2.min.js:18
Moscow Does Not Believe in Tears ID 27 tmdb.js:153
Resource interpreted as Script but transferred with MIME type text/json: "http://api.themoviedb.org/2.1/Movie.browse/en-US/json/b42ec605e4cc92c9847cf08fb8acdca9?order_by=rating&order=desc&genres=28&min_votes=5&page=1&per_page=10&callback=jsonpCallback28&_=1344360477313". jquery-1.6.2.min.js:18
Resource interpreted as Script but transferred with MIME type text/json: "http://api.themoviedb.org/2.1/Movie.browse/en-US/json/b42ec605e4cc92c9847cf08fb8acdca9?order_by=rating&order=desc&genres=27&min_votes=5&page=1&per_page=10&callback=jsonpCallback27&_=1344360477315". jquery-1.6.2.min.js:18
They Call Me Trinity ID 27 tmdb.js:153
Bride of Frankenstein ID 27
Das ist leider noch nicht ganz das, was ich gerne hätte. Im Endeffekt geht er nicht in die for-schleife nach dem success : function (data). was ich leider immer noch nicht verstehe...
 

Evil-Devil

Top Contributor
Erstmal ist wichtig festzustellen ob das JSON so gültig ist, denn da steht am Anfang ja dieses jsonpCallback27. Damit ist es kein gültiges JSON.

HTML:
{ "feldname": "wert", "mein_array": [ 1, 2, 3 ], "mein_objekt_array": [ { "feld1": "wert", "feld2": "wert"}, { "feld1": "wert", "feld2": "wert"}]}

sowas würde ich an sich erwarten als Rückgabe.
Hast im Request mal geschaut ob dort der jsonCallback27 auch drin steht?

[edit]Ändere mal den Mimetyp auf application/json, das könnte helfen...[/edit]
 

Evil-Devil

Top Contributor
So, mal geschaut.

Also du bekommst bei deinen Request reines JSON zurück.

Angenommen das JSON ist nun wirklich im DATA drin, dann solltest wie folgt (ohne jQuery erst einmal) auf die Daten zugreifen können.

HTML:
for (var i=0, il=data.length; i<il; i++) {
console.log(data[i].name)
console.log(data[i].alternative_name);
// etc...
}

Es kann durchaus sein, dass dieses AJAX Objekt mit dem JSONP noch eine Manipulation durchführt. Setze es von daher einfach mal auf JSON um.

[edit]oder lass die mimetype angabe im Ajax Request ganz weg, denn die Abfrage liefert immer JSON zurück ;) [/edit]
 

FabianLurz

Bekanntes Mitglied
Also wir sind echt gut dabei jetzt....sollte bald gelöst sein. Ich hab jetzt folgenden Code:

Code:
$.ajax({
            url : 'http://api.themoviedb.org/2.1/Movie.browse/en-US/json/b42ec605e4cc92c9847cf08fb8acdca9?order_by=rating&order=desc&genres='+id+'&min_votes=5&page=1&per_page=10',
            async: false,        
            contentType: 'application/jsonp',
            dataType: 'jsonp',
            success : function(data) { 			
			for (var x=0, il=data.length; x<il; x++) {
			console.log(data[x].name+" ID "+id)
			console.log(data[x].alternative_name);
				// etc...
			}
				 	/*for(i=abscount; i<(parseInt(wertearray[x])+parseInt(abscount));i++)
						{	
						alert(i);										
                    $('#poster'+i).html('<img src='+data[0].posters[0].image.url+'/>');
                    $("#filmname"+i).html(data[0].name);
                    $("#rating"+i).html(data[0].rating);
                    $("#overview"+i).html(data[0].overview);
                    $("#genre"+i).html(id);					
						} 									
				abscount=i;	*/	
            }						
        });
Wenn ich die MIME Types weg lasse geht es leider gar nicht mehr.
So du kannst mal schauen, was er jetzt in die Konsole schreibt. Das Problem ist eigentlich nur noch, dass die IDs immer nur auf die letzte bezogen werden(27). Er soll ja aber auch andere Genres aufrufen und nicht immer nur das letzte. Evtl. ist es jetzt nur noch irgendwie ein Denkfehler irgendwo^^
Danke übrigens schonmal für deine tatkräftige Unterstützung :)
 

Evil-Devil

Top Contributor
Die Antwort vom Request ist weiterhin korrekt. Installiere unbedingt Firebug ;)

In der Konsole werden der Name und der Alternative Name angezeigt. So wie gehofft.

Und ID bezieht sich bei dir doch auf das Genre das du abgefragt hast.

Die ID des Filmes erhälst du über data[x].id

[edit]Ich fahr mal eben nach hause...bis halb 10 sollte ich daheim sein[/edit]
 

FabianLurz

Bekanntes Mitglied
Nein schau nochmal oben. Ich ändere doch oben mit switch case die ids (Bspw. wenn Action . Es ist jetzt sogut wie alles richtig.
Ajax stimmt auch. Das Problem ist nur noch, dass er immer die letzte id nimmt. Also stimmt etwas mit dem Gesamtkonstrukt noch nicht.
Das ist jetzt definitiv das Problem:
Code:
	alert(id);
		$.ajax({
            url : "http://api.themoviedb.org/2.1/Movie.browse/en-US/json/b42ec605e4cc92c9847cf08fb8acdca9?order_by=rating&order=desc&genres="+id+"&min_votes=5&page=1&per_page=10",
            async: false,        
            contentType: 'application/jsonp',
            dataType: 'jsonp',
            success : function(data) { 				
			for (var x=0, il=data.length; x<il; x++) {
			console.log(data[x].name+" ID "+id)
			console.log(data[x].alternative_name);
			$('#poster0').html(data[x].name);
				// etc...
			}
			id=0;
				 	/*for(i=abscount; i<(parseInt(wertearray[x])+parseInt(abscount));i++)
						{	
						alert(i);										
                    $('#poster'+i).html('<img src='+data[0].posters[0].image.url+'/>');
                    $("#filmname"+i).html(data[0].name);
                    $("#rating"+i).html(data[0].rating);
                    $("#overview"+i).html(data[0].overview);
                    $("#genre"+i).html(id);					
						} 									
				abscount=i;	*/	
            }						
        });
Wenn man das so macht, werden sofort alle ids durchgegeben. Das darf aber nicht sein, da somit immer nur die letzte id abgefragt wird (nicht mit der id im JSON verwechseln).
Wenn das jetzt gelöst ist klappt alles :)
Danke dir nochmal :)
 
F

FabianL

Gast
Problem gelöst :) Es liegt daran dass die for schleife nicht auf den ajax Befehl wartet. Der reagiert zu langsam und nimmt immer die letzte id. Danke dir echt vielmals :) Zu zweit gehts echt immer besser.
 

Evil-Devil

Top Contributor
Sonst übergib doch der Funktion die ID und ruf sie als Callback auf. Dann ist es egal wann der Ajax Request zurückgeliefert wird, denn er liefert dann immer die richtige ID. Oder ich verstehe gerade was in meiner Müdigkeit falsch ^^"
 

FabianLurz

Bekanntes Mitglied
Hab das jetzt so gemacht:)

Code:
$.ajax({
            url : "http://api.themoviedb.org/3/genre/"+id+"/movies?api_key=b42ec605e4cc92c9847cf08fb8acdca9",
            async: false,        
            contentType: 'application/jsonp',
            dataType: 'jsonp',
			ajaxI: id,
			ajaxI: x,
            success : function(data) { 			
			id = this.ajaxI; 
			x=this.ajaxI;			
				 	for(i=abscount; i<(parseInt(wertearray[x])+parseInt(abscount));i++)
					{						
                    $('#poster'+i).html('<img src=http://cf2.imgobject.com/t/p/w154'+data.results[count].backdrop_path+'/>');
                    $("#filmname"+i).html("<table><tr><td valign=\"top\"><h4>Name: </h4></td><td valign=\"top\">"+data.results[count].original_title+"</td></tr></table>");
                    $("#rating"+i).html("<table><tr><td valign=\"top\"><h4>Rating: </h4></td><td valign=\"top\">"+data.results[count].vote_average+"</td></tr></table>");
                    $("#release"+i).html("<table><tr><td valign=\"top\"><h4>Release: </h4></td><td valign=\"top\">"+data.results[count].release_date+"</td></tr></table>");
                    $("#genre"+i).html("<table><tr><td valign=\"top\"><h4>Genre: </h4></td><td valign=\"top\">"+genrearray[x]+"</td></tr></table>");					
					count++;										
					} 	
					count=0;
				abscount=i;		
            }	    
	});
So funktioniert das perfekt ;)
 

Neue Themen


Oben