使用Ionic + Angular框架通过TMDb API获取电影列表并进行显示
出来上がったものは这样的样子。
【Ionic + Angular】我成功地使用TMDb API获取了电影列表并显示!pic.twitter.com/ma526HZ14i— 高卒程序员げんと (@gento34165638) 2020年9月15日
环境
我是用Ionic + Angular框架进行开发,但是我想知道在其他JS框架中是否使用的方法也是一样的。。
$ ionic info
Ionic:
Ionic CLI : 6.11.8 (/usr/local/lib/node_modules/@ionic/cli)
Ionic Framework : @ionic/angular 5.3.2
@angular-devkit/build-angular : 0.1000.8
@angular-devkit/schematics : 10.0.8
@angular/cli : 10.0.8
@ionic/angular-toolkit : 2.3.3
Capacitor:
Capacitor CLI : 2.4.1
@capacitor/core : 2.4.1
Utility:
cordova-res (update available: 0.15.1) : 0.6.0
native-run (update available: 1.1.0) : 0.2.8
System:
NodeJS : v10.15.1 (/usr/local/bin/node)
npm : 6.12.1
OS : macOS Catalina
可以使用TMDDb API获取电影信息。
首先,从上面的链接进行会员注册,并申请API密钥。
※在API密钥申请中会被问到“您将用于什么应用程序?”之类的问题,请用英语回答。
用日语回答会触发错误。
创建一个Ionic项目
ionic start movieApp blank --capacitor
没关系,你随便什么都可以,我会随意地用blank来制作。
准备工作已经完成!
使用TMDb API获取电影列表。
首先,我们需要在api.service.ts中创建一个名为管理API密钥的服务文件。
创建处理API信息的服务。
ionic g service service/api
这样,api.service.ts就会被创建在service文件夹中了吧。
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class ApiService {
apiKey = '***';
// 最後に &language=ja をつけると日本語に
getNowPlayingURL = `https://api.themoviedb.org/3/movie/now_playing?api_key=${this.apiKey}`;
constructor() { }
}
只需要在最后添加“&language=ja”,就可以用日语获取API信息(仅当有日语信息可用时)。请访问以下网址了解更多信息:https://developers.themoviedb.org/3/getting-started/languages
getNowPlayingURL = `https://api.themoviedb.org/3/movie/now_playing?api_key=${this.apiKey}&language=ja`;
准备一个用于处理API的Http模块
首先,在app.module.ts中导入HttpClientModule。
如果不这样做,就无法使用所需的HttpClient。
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouteReuseStrategy } from '@angular/router';
import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx';
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
import { HttpClientModule } from '@angular/common/http';
@NgModule({
declarations: [AppComponent],
entryComponents: [],
imports: [
BrowserModule,
IonicModule.forRoot(),
AppRoutingModule,
HttpClientModule,
],
providers: [
StatusBar,
SplashScreen,
{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy }
],
bootstrap: [AppComponent]
})
export class AppModule {}
下一个是home.page.ts
import { ApiService } from './../service/api.service';
import { HttpClient } from '@angular/common/http';
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-home',
templateUrl: 'home.page.html',
styleUrls: ['home.page.scss'],
})
export class HomePage implements OnInit {
// 映画の情報を入れ込む
list;
constructor(
private http: HttpClient,
private apiService: ApiService,
) { }
ngOnInit() {
// (data: any)のようにカッコがないと「resultsなんかないぞ」とエラーくらいます
this.getMovies().subscribe((data: any) => {
console.log(data);
this.list = data.results;
});
}
// api.service.tsのプロパティーを使う
getMovies() {
return this.http.get(this.apiService.getNowPlayingURL);
}
}
在屏幕上显示
<ion-header [translucent]="false">
<ion-toolbar color="primary">
<ion-buttons slot="start">
<ion-menu-button></ion-menu-button>
</ion-buttons>
<ion-title>
このみる
</ion-title>
</ion-toolbar>
</ion-header>
<ion-content [fullscreen]="true">
<ion-header collapse="condense">
<ion-toolbar>
<ion-title>Now Movies</ion-title>
</ion-toolbar>
</ion-header>
<ion-grid>
<ion-row>
<ion-col>
<ion-card *ngFor="let movie of list" class="ion-padding-top">
<div class="ion-text-center">
<img src="https://image.tmdb.org/t/p/w300_and_h450_bestv2/{{movie.poster_path}}" />
</div>
<ion-card-header>
<ion-card-subtitle>{{ movie.release_date }}</ion-card-subtitle>
<ion-card-title>{{ movie.title }}</ion-card-title>
</ion-card-header>
<ion-card-content>
{{ movie.overview }}
</ion-card-content>
</ion-card>
</ion-col>
</ion-row>
</ion-grid>
</ion-content>
如果能够成功获取这个,就可以了!
哎呀,TMDb API 真厉害,而且还可以免费商用!
参考页面
结束
可以在Ionic + Angular中使用TMDb API来实现电影搜索。