# TheMovieDataBase



## FabianL (7. Aug 2012)

Hallo Leute,
also ich weiß echt nicht was ich noch machen soll. Ich möchte von tmdb einfach daten erhalten. Dazu verwende ich folgendes:

```
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 

```
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


----------



## Evil-Devil (7. Aug 2012)

Wie ist das JSON das du erhälst denn aufgebaut? Im Normalfall kann man da ohne Probleme drüben loopen und zugreifen.


----------



## FabianL (7. Aug 2012)

Danke erstmal für die schnelle Antwort. Ich hoffe ich bekomme das heute noch hin mit eurer Hilfe...kann nicht aufhören sonst

```
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 (7. Aug 2012)

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


```
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

```
console.log(data[0].name)
```
probiert? (Setzt FIrebug o.ä. voraus)


----------



## FabianL (7. Aug 2012)

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:


```
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 (7. Aug 2012)

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.


```
{ "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]


----------



## FabianLurz (7. Aug 2012)

Ich geb dir jetzt mal Zugang. Schreib dir eine Nachricht


----------



## FabianLurz (7. Aug 2012)

Also es sieht irgendwie so aus, also wäre das Format nicht richtig.


----------



## Evil-Devil (7. Aug 2012)

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.


```
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 (7. Aug 2012)

Also wir sind echt gut dabei jetzt....sollte bald gelöst sein. Ich hab jetzt folgenden 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 (7. Aug 2012)

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 (7. Aug 2012)

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:

```
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


----------



## FabianL (7. Aug 2012)

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 (7. Aug 2012)

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 (7. Aug 2012)

Hab das jetzt so gemacht


```
$.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


----------

