Ambiti di autorizzazione richiesti
L'ambito photoslibrary.readonly
consente di accedere a tutti gli elementi multimediali della raccolta dell'utente.
Per cercare e applicare filtri ai contenuti creati dalle app è necessario lo scopo
photoslibrary.readonly.appcreateddata
. Per ulteriori informazioni sugli ambiti, consulta
Ambiti di autorizzazione.
Filtri disponibili
Puoi cercare tipi specifici di contenuti multimediali nella raccolta di elementi multimediali creati dall'app di un utente. Ad esempio, potresti voler includere solo gli elementi che raffigurano animali, di un determinato giorno o escludere le foto delle ricevute. Puoi escludere o includere elementi specifici applicando filtri a una scheda di un album o di una raccolta. Sono disponibili cinque filtri in base alle proprietà degli elementi multimediali:
- Categorie di contenuti (
includedContentCategories
,excludedContentCategories
) - Date e intervalli di date (
dates
,ranges
) - Funzionalità (
featureFilter
) - Tipi di media (
mediaTypeFilter
) - Stato archiviato (
includeArchivedMedia
)
I filtri non devono essere utilizzati in una richiesta mediaItems.search
se è impostato albumId
. Se viene utilizzato un filtro quando albumId è impostato, viene restituito un errore INVALID_ARGUMENT
(400).
I risultati vengono ordinati in base alla data di creazione dell'elemento multimediale. L'ordine di ordinamento puoi essere modificato per le query che utilizzano i filtri data.
Attendi un po' di tempo prima che i contenuti multimediali appena caricati vengano visualizzati nelle tue ricerche. I contenuti multimediali vengono visualizzati immediatamente nelle ricerche non filtrate.
Gli elementi multimediali con una data futura non vengono visualizzati nelle ricerche filtrate. Vengono visualizzate nelle ricerche non filtrate e nelle ricerche di album.
Applicazione di un filtro
Per applicare un filtro, chiama
mediaItems.search
e
specifica la proprietà filter
.
REST
Ecco una richiesta POST:
POST https://photoslibrary.googleapis.com/v1/mediaItems:search Content-type: application/json Authorization: Bearer oauth2-token { "pageSize": "100", "filters": { ... } }
La richiesta POST restituisce la seguente risposta:
{ "mediaItems": [ ... ], "nextPageToken": "token-for-pagination" }
Java
try { // Create a new Filter object Filters filters = Filters.newBuilder() // .setContentFilter(...) // .setDateFilter(...) // ... .build(); // Specify the Filter object in the searchMediaItems call SearchMediaItemsPagedResponse response = photosLibraryClient.searchMediaItems(filters); for (MediaItem item : response.iterateAll()) { // ... } } catch (ApiException e) { // Handle error }
PHP
try { $filtersBuilder = new FiltersBuilder(); // $filtersBuilder->addIncludedCategory(...); // $filtersBuilder->addDate(...); // ... // Make a search call with the options set in the filters builder $response = $photosLibraryClient->searchMediaItems( ['filters' => $filtersBuilder->build()] ); foreach ($response->iterateAllElements() as $element) { // ... } } catch (\Google\ApiCore\ApiException $e) { // Handle error }
Per maggiori dettagli, vedi Elenca contenuti della raccolta, album e elementi multimediali.
Categorie di contenuti
Tutti gli elementi multimediali vengono elaborati e a cui vengono assegnate etichette. Puoi includere ed escludere una qualsiasi delle seguenti categorie.
ANIMALS |
FASHION |
LANDMARKS |
RECEIPTS |
WEDDINGS |
ARTS |
FLOWERS |
LANDSCAPES |
SCREENSHOTS |
WHITEBOARDS |
BIRTHDAYS |
FOOD |
NIGHT |
SELFIES |
|
CITYSCAPES |
GARDENS |
PEOPLE |
SPORT |
|
CRAFTS |
HOLIDAYS |
PERFORMANCES |
TRAVEL |
|
DOCUMENTS |
HOUSES |
PETS |
UTILITY |
Le foto di utilità coprono una vasta gamma di contenuti multimediali. In genere, questa categoria include gli elementi acquisiti dall'utente per svolgere un'attività e che è improbabile che voglia conservare al termine dell'attività. Sono inclusi documenti, scontrini, screenshot, note adesive, menu e altri elementi multimediali simili.
Le categorie sono precise solo quanto le etichette equivalenti in Google Foto. A volte gli elementi potrebbero essere etichettati in modo errato, pertanto non garantiamo l'accuratezza dei filtri delle categorie di contenuti.
Includi categorie
Quando includi più categorie, vengono inclusi gli elementi multimediali corrispondenti a una o più categorie. È possibile includere un massimo di 10 categorie per richiesta.
Questo filtro di esempio restituisce tutti gli elementi di LANDSCAPES
o LANDMARKS
.
REST
{ "filters": { "contentFilter": { "includedContentCategories": [ "LANDSCAPES", "LANDMARKS" ] } } }
Java
// Create a content filter that includes landmarks and landscapes ContentFilter contentFilter = ContentFilter.newBuilder() .addIncludedContentCategories(ContentCategory.LANDMARKS) .addIncludedContentCategories(ContentCategory.LANDSCAPES) .build(); // Create a new Filters object Filters filters = Filters.newBuilder() .setContentFilter(contentFilter) .build(); // Specify the Filter object in the searchMediaItems call SearchMediaItemsPagedResponse response = photosLibraryClient.searchMediaItems(filters);
PHP
// Create a content filter that includes landmarks and landscapes $filtersBuilder = new FiltersBuilder(); $filtersBuilder->addIncludedCategory(ContentCategory::LANDMARKS); $filtersBuilder->addIncludedCategory(ContentCategory::LANDSCAPES); // Make a search call with the options set in the filters builder $response = $photosLibraryClient->searchMediaItems( ['filters' => $filtersBuilder->build()] );
Esclusione di categorie
Vengono visualizzati solo gli elementi multimediali che non corrispondono a nessuna delle categorie escluse. Analogamente alle categorie incluse, è possibile escludere un massimo di 10 categorie per richiesta.
Questo filtro restituisce tutti gli elementi diversi da PEOPLE
o SELFIES
:
REST
{ "filters": { "contentFilter": { "excludedContentCategories": [ "PEOPLE", "SELFIES" ] } } }
Java
// Create a content filter that excludes people and selfies ContentFilter contentFilter = ContentFilter.newBuilder() .addExcludedContentCategories(ContentCategory.PEOPLE) .addExcludedContentCategories(ContentCategory.SELFIES) .build(); // Create a new Filters object Filters filters = Filters.newBuilder() .setContentFilter(contentFilter) .build(); // Specify the Filter object in the searchMediaItems call SearchMediaItemsPagedResponse response = photosLibraryClient.searchMediaItems(filters);
PHP
// Create a content filter that excludes people and selfies $filtersBuilder = new FiltersBuilder(); $filtersBuilder->addExcludedCategory(ContentCategory::PEOPLE); $filtersBuilder->addExcludedCategory(ContentCategory::SELFIES); // Make a search call with the options set in the filters builder $response = $photosLibraryClient->searchMediaItems( ['filters' => $filtersBuilder->build()] );
Inclusione ed esclusione di più categorie
Puoi includere alcune categorie ed escluderne altre. L'esempio seguente
restituisce LANDSCAPES
e LANDMARKS
, ma rimuove tutti gli elementi multimediali che contengono
PEOPLE
o che sono SELFIES
:
REST
{ "filters": { "contentFilter": { "includedContentCategories": [ "LANDSCAPES", "LANDMARKS" ], "excludedContentCategories": [ "PEOPLE", "SELFIES" ] } } }
Java
// Create a content filter that excludes people and selfies and includes landmarks and landscapes ContentFilter contentFilter = ContentFilter.newBuilder() .addIncludedContentCategories(ContentCategory.LANDSCAPES) .addIncludedContentCategories(ContentCategory.LANDMARKS) .addExcludedContentCategories(ContentCategory.PEOPLE) .addExcludedContentCategories(ContentCategory.SELFIES) .build(); // Create a new Filters object Filters filters = Filters.newBuilder() .setContentFilter(contentFilter) .build(); // Specify the Filters object in the searchMediaItems call SearchMediaItemsPagedResponse response = photosLibraryClient.searchMediaItems(filters);
PHP
// Create a content filter that excludes people and selfies and includes landmarks and landscapes $filtersBuilder = new FiltersBuilder(); $filtersBuilder->addIncludedCategory(ContentCategory::LANDMARKS); $filtersBuilder->addIncludedCategory(ContentCategory::LANDSCAPES); $filtersBuilder->addExcludedCategory(ContentCategory::PEOPLE); $filtersBuilder->addExcludedCategory(ContentCategory::SELFIES); // Make a search call with the options set in the filters builder $response = $photosLibraryClient->searchMediaItems( ['filters' => $filtersBuilder->build()] );
Date e intervalli di date
I filtri data limitano la data dei risultati restituiti a un insieme specificato di giorni. Esistono due modi per specificare un filtro della data: date o intervalli. Le date e gli intervalli possono essere utilizzati insieme. Vengono restituiti gli elementi multimediali corrispondenti a una delle date o degli intervalli di date. Se vuoi, puoi modificare l'ordine di ordinamento dei risultati.
Date
Una data contiene un anno, un mese e un giorno. Sono accettati i seguenti formati:
- Anno
- Anno, mese
- Anno, mese, giorno
- Giorno, mese
- Mese
Se un componente della data è vuoto o impostato su zero, viene considerato come un carattere jolly. Ad esempio, se imposti il giorno e il mese, ma non l'anno, stai richiedendo gli articoli del giorno e del mese di qualsiasi anno:
REST
{ "filters": { "dateFilter": { "dates": [ { "month": 2, "day": 15 } ] } } }
Java
// Create a new com.google.type.Date object using a builder // Note that there are different valid combinations as described above Date dayFebruary15 = Date.newBuilder() .setDay(15) .setMonth(2) .build(); // Create a new dateFilter. You can also set multiple dates here DateFilter dateFilter = DateFilter.newBuilder() .addDates(dayFebruary15) .build(); // Create a new Filters object Filters filters = Filters.newBuilder() .setDateFilter(dateFilter) .build(); // Specify the Filters object in the searchMediaItems call SearchMediaItemsPagedResponse response = photosLibraryClient.searchMediaItems(filters);
PHP
// Create a new Google\Type\Date object with a day and a month // Note that there are different valid combinations as described above $dateFebruary15 = new Date(); $dateFebruary15->setDay(15); $dateFebruary15->setMonth(2); $filtersBuilder = new FiltersBuilder(); // Add the date to the filter. You can also set multiple dates here $filtersBuilder->addDate($dateFebruary15); // Make a search call with the options set in the filters builder $response = $photosLibraryClient->searchMediaItems( ['filters' => $filtersBuilder->build()] );
Intervalli di date
Gli intervalli di date offrono una maggiore flessibilità rispetto alle date. Ad esempio, anziché aggiungere più date, puoi utilizzare un intervallo di date per visualizzare un insieme di giorni all'interno di un mese.
Un intervallo di date ha un startDate
e un endDate
, entrambi devono essere impostati. Ogni
data nell'intervallo ha gli stessi vincoli di formato descritti in
Date. Le date devono avere lo stesso formato: se la data di inizio è un anno e un mese, anche la data di fine deve essere un anno e un mese. Gli intervalli vengono applicati in modo inclusivo, le date di inizio e di fine sono incluse nel filtro applicato:
REST
{ "filters": { "dateFilter": { "ranges": [ { "startDate": { "year": 2014, "month": 6, "day": 12 }, "endDate": { "year": 2014, "month": 7, "day": 13 } } ] } } }
Java
// Create new com.google.type.Date objects for two dates Date day2014June12 = Date.newBuilder() .setDay(12) .setMonth(6) .setYear(2014) .build(); Date day2014July13 = Date.newBuilder() .setDay(13) .setMonth(7) .setYear(2014) .build(); // Create a DateRange from these two dates DateRange dateRange = DateRange.newBuilder() .setStartDate(day2014June12) .setEndDate(day2014July13) .build(); // Create a new dateFilter with the date range. You can also set multiple date ranges here DateFilter dateFilter = DateFilter.newBuilder() .addRanges(dateRange) .build(); // Create a new Filters object Filters filters = Filters.newBuilder() .setDateFilter(dateFilter) .build(); // Specify the Filters object in the searchMediaItems call SearchMediaItemsPagedResponse response = photosLibraryClient.searchMediaItems(filters);
PHP
// Create two new Google\Type\Date objects $date2014June12 = new Date(); $date2014June12->setDay(12); $date2014June12->setMonth(6); $date2014June12->setYear(2014); $date2014July13 = new Date(); $date2014July13->setDay(13); $date2014July13->setMonth(7); $date2014July13->setYear(2014); // Add the two dates as a date range to the filter // You can also set multiple date ranges here $filtersBuilder = new FiltersBuilder(); $filtersBuilder->addDateRange($date2014June12, $date2014July13); // Make a search call with the options set in the filters builder $response = $photosLibraryClient->searchMediaItems( ['filters' => $filtersBuilder->build()] );
Combinare date e intervalli di date
Puoi utilizzare più date e più intervalli di date contemporaneamente. Gli elementi che rientrano in una di queste date sono inclusi nei risultati. Le date e gli intervalli di date separati non devono seguire lo stesso formato, ma le date di inizio e di fine dei singoli intervalli devono farlo:
REST
{ "filters": { "dateFilter": { "dates": [ { "year": 2013 }, { "year": 2011, "month": 11 } ], "ranges": [ { "startDate": { "month": 1 }, "endDate": { "month": 3 } }, { "startDate": { "month": 3, "day": 24 }, "endDate": { "month": 5, "day": 2 } } ] } } }
Java
// Create a new com.google.type.Date object for the year 2013 Date day2013 = Date.newBuilder() .setYear(2013) .build(); // Create a new com.google.type.Date object for November 2011 Date day2011November = Date.newBuilder() .setMonth(11) .setYear(2011) .build(); // Create a date range for January to March DateRange dateRangeJanuaryToMarch = DateRange.newBuilder() .setStartDate(Date.newBuilder().setMonth(1).build()) .setEndDate(Date.newBuilder().setMonth(3).build()) .build(); // Create a date range for March 24 to May 2 DateRange dateRangeMarch24toMay2 = DateRange.newBuilder() .setStartDate(Date.newBuilder().setMonth(3).setDay(24).build()) .setEndDate(Date.newBuilder().setMonth(5).setDay(2).build()) .build(); // Create a new dateFilter with the dates and date ranges DateFilter dateFilter = DateFilter.newBuilder() .addDates(day2013) .addDates(day2011November) .addRanges(dateRangeJanuaryToMarch) .addRanges(dateRangeMarch24toMay2) .build(); // Create a new Filters object Filters filters = Filters.newBuilder() .setDateFilter(dateFilter) .build(); // Specify the Filter object in the searchMediaItems call SearchMediaItemsPagedResponse response = photosLibraryClient.searchMediaItems(filters);
PHP
// Create a new Google\Type\Date object for the year 2013 $date2013 = new Date(); $date2013->setYear(2013); // Create a new Google\Type\Date object for November 2011 $dateNovember2011 = new Date(); $dateNovember2011->setMonth(11); $dateNovember2011->setYear(2011); $filtersBuilder = new FiltersBuilder(); // Create a date range for January to March $filtersBuilder->addDateRange((new Date())->setMonth(1), (new Date())->setMonth(3)); // Create a date range for March 24 to May 2 $filtersBuilder->addDateRange((new Date())->setMonth(3)->setDay(24), (new Date())->setMonth(5)->setDay(2)); $filtersBuilder->addDate($date2013); $filtersBuilder->addDate($dateNovember2011); // Make a search call with the options set in the filters builder $response = $photosLibraryClient->searchMediaItems( ['filters' => $filtersBuilder->build()] );
Funzionalità degli elementi multimediali
I filtri delle funzionalità limitano i risultati agli elementi con funzionalità specifiche, ad esempio quelli contrassegnati come preferiti nell'applicazione Google Foto.
Preferiti
Includi la funzionalità elemento FAVORITES
in FeatureFilter
per restituire solo gli elementi multimediali contrassegnati come preferiti dall'utente:
REST
{ "filters" : { "featureFilter": { "includedFeatures": [ "FAVORITES" ] } } }
Java
// Create a new FeatureFilter for favorite media items FeatureFilter featureFilter = FeatureFilter.newBuilder() .addIncludedFeatures(Feature.FAVORITES) .build(); // Create a new Filters object Filters filters = Filters.newBuilder() .setFeatureFilter(featureFilter) .build(); // Specify the Filters object in the searchMediaItems call SearchMediaItemsPagedResponse response = photosLibraryClient.searchMediaItems(filters);
PHP
// Create a new FeatureFilter for favorite media items $filtersBuilder = new FiltersBuilder(); $filtersBuilder->addIncludedFeature(Feature::FAVORITES); // Make a search call with the options set in the filters builder $response = $photosLibraryClient->searchMediaItems( ['filters' => $filtersBuilder->build()] );
Tipi di media
Puoi limitare i risultati al tipo di contenuti multimediali: foto o video.
Foto
Un PHOTO
può essere uno dei seguenti formati di immagine:
BMP | JPG |
GIF | PN |
HEIC | TIFF |
ICO | WEBP |
Sono inclusi anche tipi di foto speciali come foto dal vivo di iOS, foto in movimento, panoramiche, foto sferiche e foto VR.
Video
Un VIDEO
può avere vari formati video:
3GP | MMV |
3G2 | MOD |
ASF | MOV |
AVI | MP4 |
DIVX | MPG |
M2T | MTS |
M2TS | TOD |
M4V | WMV |
MKV |
VIDEO
include anche formati video speciali come i seguenti: video VR,
video in slow motion e animazioni create nell'applicazione
Google Foto.
Il seguente esempio filtra per PHOTO
:
REST
{ "filters": { "mediaTypeFilter": { "mediaTypes": [ "PHOTO" ] } } }
Java
// Create a new MediaTypeFilter for Photo media items MediaTypeFilter mediaType = MediaTypeFilter.newBuilder() .addMediaTypes(MediaType.PHOTO) .build(); // Create a new Filters object Filters filters = Filters.newBuilder() .setMediaTypeFilter(mediaType) .build(); // Specify the Filters object in the searchMediaItems call SearchMediaItemsPagedResponse response = photosLibraryClient.searchMediaItems(filters);
PHP
// Create a new MediaTypeFilter for Photo media items $filtersBuilder = new FiltersBuilder(); $filtersBuilder->setMediaType(MediaType::PHOTO); // Make a search call with the options set in the filters builder $response = $photosLibraryClient->searchMediaItems( ['filters' => $filtersBuilder->build()] );
Non è possibile combinare più filtri per tipo di media.
Stato archiviato
I tuoi utenti potrebbero aver archiviato alcune delle loro foto. Per impostazione predefinita, le foto archiviate non vengono restituite nelle ricerche. Per includere gli elementi archiviati, puoi impostare un flag nel filtro come mostrato nell'esempio seguente:
REST
{ "filters": { "includeArchivedMedia": true } }
Java
// Create a new Filters object that includes archived media Filters filters = Filters.newBuilder() .setIncludeArchivedMedia(true) .build(); // Specify the Filters object in the searchMediaItems call SearchMediaItemsPagedResponse response = photosLibraryClient.searchMediaItems(filters);
PHP
// Create a new Filters object that includes archived media $filtersBuilder = new FiltersBuilder(); $filtersBuilder->setIncludeArchivedMedia(true); // Make a search call with the options set in the filters builder $response = $photosLibraryClient->searchMediaItems( ['filters' => $filtersBuilder->build()] );
Combinazione di filtri
È possibile combinare diversi tipi di filtri. Vengono restituiti solo gli elementi che corrispondono a tutte le caratteristiche richieste.
Quando combini i filtri, le limitazioni di formattazione per ciascun tipo di filtro sono le stesse di quando i filtri vengono utilizzati singolarmente. Nell'esempio seguente vengono restituite solo le foto classificate come SPORT
e risalenti al 2014 o al 2010:
REST
{ "filters": { "contentFilter": { "includedContentCategories": [ "SPORT" ] }, "dateFilter": { "dates": [ { "year": 2014 }, { "year": 2010 } ] }, "mediaTypeFilter": { "mediaTypes": [ "PHOTO" ] } } }
Java
// Create a new ContentFilter that only includes SPORT items ContentFilter contentFilter = ContentFilter.newBuilder() .addIncludedContentCategories(ContentCategory.SPORT) .build(); // Create a new media type filter that only includes PHOTO media items MediaTypeFilter mediaTypeFilter = MediaTypeFilter.newBuilder() .addMediaTypes(MediaType.PHOTO) .build(); // Create a new DateFilter that only includes items from 2010 or 2014 Date year2014 = Date.newBuilder().setYear(2014).build(); Date year2010 = Date.newBuilder().setYear(2010).build(); DateFilter dateFilter = DateFilter.newBuilder() .addDates(year2010) .addDates(year2014) .build(); // Create a new Filters object combining these filters Filters filters = Filters.newBuilder() .setDateFilter(dateFilter) .setMediaTypeFilter(mediaTypeFilter) .setContentFilter(contentFilter) .build(); // Specify the Filter object in the searchMediaItems call SearchMediaItemsPagedResponse response = photosLibraryClient.searchMediaItems(filters);
PHP
// Create a new ContentFilter $filtersBuilder = new FiltersBuilder(); // Only include SPORT items $filtersBuilder->addIncludedCategory(ContentCategory::SPORT); // Only include PHOTO media items $filtersBuilder->setMediaType(MediaType::PHOTO); // Only include items from 2010 or 2014 $year2014 = new Date(); $year2014->setYear(2014); $year2010 = new Date(); $year2010->setYear(2010); $filtersBuilder->addDateRange($year2010, $year2014); // Make a search call with the options set in the filters builder // Filters have been combined in the filter builder $response = $photosLibraryClient->searchMediaItems( ['filters' => $filtersBuilder->build()] );
Ordinamento dei risultati
È possibile ordinare solo le query che utilizzano filtri data.
Se non specifichi un'opzione di ordinamento, i risultati verranno ordinati in ordine decrescente (dal più recente).
Questa tabella mostra le opzioni supportate per il parametro orderBy
:
Parametro orderBy |
|
---|---|
MediaMetadata.creation_time desc |
Restituisce gli elementi multimediali in ordine decrescente (prima gli elementi più recenti) |
MediaMetadata.creation_time |
Restituisce gli elementi multimediali in ordine crescente (dal meno recente) |
L'esempio seguente restituisce tutti gli elementi multimediali del 2017, mostrando prima quelli più vecchi e poi quelli più recenti.
REST
{ "filters": { "dateFilter": { "dates": [ { "year": 2017 } ] } }, "orderBy": "MediaMetadata.creation_time" }
Java
// Create a new dateFilter for the year 2017. DateFilter dateFilter = DateFilter.newBuilder() .addDates(Date.newBuilder().setYear(2017)) .build(); // Create a new Filters object Filters filters = Filters.newBuilder() .setDateFilter(dateFilter) .build(); // Sort results by oldest item first. final OrderBy newestFirstOrder = OrderBy.MEDIAMETADATA_CREATION_TIME; // Specify the filter and sort order in the searchMediaItems call. SearchMediaItemsPagedResponse response = photosLibraryClient.searchMediaItems(filters, newestFirstOrder);
PHP
// Create a new dateFilter for the year 2017. $filtersBuilder = new FiltersBuilder(); $filtersBuilder->addDate((new Date())->setYear(2017)); // Make a search call with the options set in the filters builder and sort // the results by oldest item first. $response = $photosLibraryClient->searchMediaItems( [ 'filters' => $filtersBuilder->build(), 'orderBy' => OrderBy::MEDIAMETADATA_CREATION_TIME ] );