/
AJSITunesResult.m
139 lines (122 loc) · 5.56 KB
/
AJSITunesResult.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
//
// AJSITunesResult.m
// AJSITunesAPI
//
// Created by Andy Smart on 06/09/2013.
// Copyright (c) 2013 Rocket Town Ltd. All rights reserved.
//
#import "AJSITunesResult.h"
#import <ISO8601DateFormatter/ISO8601DateFormatter.h>
NSString *const AJSITunesMediaTypeAll = @"all";
NSString *const AJSITunesMediaTypeMusic = @"music";
NSString *const AJSITunesMediaTypeMovie = @"movie";
NSString *const AJSITunesMediaTypeMusicVideo = @"musicVideo";
NSString *const AJSITunesMediaTypeTVShow = @"tvShow";
NSString *const AJSITunesMediaTypeAudiobook = @"audiobook";
NSString *const AJSITunesMediaTypeEBook = @"ebook";
NSString *const AJSITunesMediaTypePodcast = @"podcast";
NSString *const AJSITunesMediaTypeShortFilm = @"shortFilm";
NSString *const AJSITunesMediaTypeSoftware = @"software";
NSString *const AJSITunesEntityTypeAlbum = @"album";
NSString *const AJSITunesEntityTypeAllArtist = @"allArtist";
NSString *const AJSITunesEntityTypeAllTrack = @"allTrack";
NSString *const AJSITunesEntityTypeAudiobook = @"audiobook";
NSString *const AJSITunesEntityTypeAudiobookAuthor = @"audiobookAuthor";
NSString *const AJSITunesEntityTypeEbook = @"ebook";
NSString *const AJSITunesEntityTypeIPadSoftware = @"iPadSoftware";
NSString *const AJSITunesEntityTypeMacSoftware = @"software";
NSString *const AJSITunesEntityTypeMix = @"mix";
NSString *const AJSITunesEntityTypeMovie = @"movie";
NSString *const AJSITunesEntityTypeMovieArtist = @"movieArtist";
NSString *const AJSITunesEntityTypeMusicTrack = @"musicTrack";
NSString *const AJSITunesEntityTypeMusicVideo = @"musicVideo";
NSString *const AJSITunesEntityTypePodcast = @"podcast";
NSString *const AJSITunesEntityTypePodcastAuthor = @"podcastAutor";
NSString *const AJSITunesEntityTypeShortFilm = @"shortFilm";
NSString *const AJSITunesEntityTypeShortFilmArtist = @"shortFilmArtist";
NSString *const AJSITunesEntityTypeSoftware = @"software";
NSString *const AJSITunesEntityTypeSong = @"song";
NSString *const AJSITunesEntityTypeTvEpisode = @"tvEpisode";
NSString *const AJSITunesEntityTypeTvSeason = @"tvSeason";
NSString *const AJSITunesAttributeAlbumTerm = @"albumTerm";
NSString *const AJSITunesAttributeAllArtistTerm = @"allArtistTerm";
NSString *const AJSITunesAttributeAllTrackTerm = @"allTrackTerm";
NSString *const AJSITunesAttributeArtistTerm = @"artistTerm";
NSString *const AJSITunesAttributeAuthorTerm = @"authorTerm";
NSString *const AJSITunesAttributeComposerTerm = @"composerTerm";
NSString *const AJSITunesAttributeDescriptionTerm = @"descriptionTerm";
NSString *const AJSITunesAttributeDirectorTerm = @"directorTerm";
NSString *const AJSITunesAttributeFeatureFilmTerm = @"featureFilmTerm";
NSString *const AJSITunesAttributeGenreIndex = @"genreIndex";
NSString *const AJSITunesAttributeKeywordsTerm = @"keywordsTerm";
NSString *const AJSITunesAttributeLanguageTerm = @"languageTerm";
NSString *const AJSITunesAttributeMixTerm = @"mixTerm";
NSString *const AJSITunesAttributeMovieArtistTerm = @"movieArtistTerm";
NSString *const AJSITunesAttributeMovieTerm = @"movieTerm";
NSString *const AJSITunesAttributeProducerTerm = @"producerTerm";
NSString *const AJSITunesAttributeRatingIndex = @"ratingIndex";
NSString *const AJSITunesAttributeRatingTerm = @"ratingTerm";
NSString *const AJSITunesAttributeReleaseYearTerm = @"releaseYearTerm";
NSString *const AJSITunesAttributeShortFilmTerm = @"shortFilmTerm";
NSString *const AJSITunesAttributeShowTerm = @"showTerm";
NSString *const AJSITunesAttributeSoftwareDeveloper = @"softwareDeveloper";
NSString *const AJSITunesAttributeSongTerm = @"songTerm";
NSString *const AJSITunesAttributeTitleTerm = @"titleTerm";
NSString *const AJSITunesAttributeTvEpisodeTerm = @"tvEpisodeTerm";
NSString *const AJSITunesAttributeTvSeasonTerm = @"tvSeasonTerm";
@interface AJSITunesResult()
@property (nonatomic, strong) NSString *imageURLString;
@end
@implementation AJSITunesResult
+ (ISO8601DateFormatter *)dateFormatter
{
ISO8601DateFormatter *formatter = [[ISO8601DateFormatter alloc] init];
return formatter;
}
#pragma mark - Images
- (NSURL *)imageURL
{
NSString *stripped = [self.imageURLString stringByReplacingOccurrencesOfString:@"100x100-75." withString:@""];
return [NSURL URLWithString:stripped];
}
- (NSURL *)thumnailImageURL
{
return [NSURL URLWithString:self.imageURLString];
}
#pragma mark - JSON Serialization
+ (NSDictionary *)JSONKeyPathsByPropertyKey
{
return @{ @"itemID" : @"trackId",
@"artistID" : @"artistId",
@"trackCount" : @"trackCount",
@"trackNumber" : @"trackNumber",
@"title" : @"trackName",
@"artistName" : @"artistName",
@"genreName" : @"primaryGenreName",
@"collectionName" : @"collectionName",
@"mediaType" : @"kind",
@"itemDescription" : @"longDescription",
@"previewURL" : @"previewUrl",
@"viewURL" : @"trackViewUrl",
@"duration" : @"trackTimeMillis",
@"releaseDate" : @"releaseDate",
@"imageURLString" : @"artworkUrl100",
};
}
+ (NSValueTransformer *)previewURLValueTransformer
{
return [NSValueTransformer valueTransformerForName:MTLURLValueTransformerName];
}
+ (NSValueTransformer *)viewURLValueTransformer
{
return [NSValueTransformer valueTransformerForName:MTLURLValueTransformerName];
}
+ (NSValueTransformer *)releaseDateValueTransformer
{
return [MTLValueTransformer reversibleTransformerWithForwardBlock:^(NSString *str) {
return [[self dateFormatter] dateFromString:str];
} reverseBlock:^(NSDate *date) {
return [[self dateFormatter] stringFromDate:date];
}];;
}
@end