Completed
Push — master ( 6cedf3...24ee53 )
by Sergey
41s
created

UrlBuilder::getSearchUrl()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 6
c 0
b 0
f 0
rs 9.4285
cc 2
eloc 4
nc 2
nop 1
1
<?php
2
3
namespace seregazhuk\PinterestBot\Helpers;
4
5
/**
6
 * Class UrlHelper.
7
 */
8
class UrlBuilder
9
{
10
    /**
11
     * Login
12
     */
13
    const RESOURCE_LOGIN = 'resource/UserSessionResource/create/';
14
15
    /**
16
     * Boards
17
     */
18
    const RESOURCE_GET_BOARDS = 'resource/BoardsResource/get/';
19
    const RESOURCE_GET_BOARD_FEED = 'resource/BoardFeedResource/get/';
20
    const RESOURCE_PROFILE_BOARDS = 'resource/ProfileBoardsResource/get/';
21
    const RESOURCE_FOLLOW_BOARD = 'resource/BoardFollowResource/create/';
22
    const RESOURCE_UNFOLLOW_BOARD = 'resource/BoardFollowResource/delete/';
23
    const RESOURCE_DELETE_BOARD = 'resource/BoardResource/delete/';
24
    const RESOURCE_CREATE_BOARD = 'resource/BoardResource/create/';
25
    const RESOURCE_UPDATE_BOARD = 'resource/BoardResource/update/';
26
    const RESOURCE_BOARD_FOLLOWERS = 'resource/BoardFollowersResource/get/';
27
    const RESOURCE_FOLLOWING_BOARDS = 'resource/BoardFollowingResource/get/';
28
29
    /**
30
     * Pins
31
     */
32
    const RESOURCE_CREATE_PIN = 'resource/PinResource/create/';
33
    const RESOURCE_UPDATE_PIN = 'resource/PinResource/update/';
34
    const RESOURCE_REPIN = 'resource/RepinResource/create/';
35
    const RESOURCE_USER_FOLLOWERS = 'resource/UserFollowersResource/get/';
36
    const RESOURCE_DELETE_PIN = 'resource/PinResource/delete/';
37
    const RESOURCE_LIKE_PIN = 'resource/PinLikeResource/create/';
38
    const RESOURCE_UNLIKE_PIN = 'resource/PinLikeResource/delete/';
39
    const RESOURCE_COMMENT_PIN = 'resource/PinCommentResource/create/';
40
    const RESOURCE_COMMENT_DELETE_PIN = 'resource/PinCommentResource/delete/';
41
    const RESOURCE_PIN_INFO = 'resource/PinResource/get/';
42
    const RESOURCE_DOMAIN_FEED = 'resource/DomainFeedResource/get';
43
    const RESOURCE_ACTIVITY = 'resource/AggregatedActivityFeedResource/get';
44
    const RESOURCE_USER_FEED = 'resource/UserHomefeedResource/get/';
45
46
    /**
47
     * Pinners
48
     */
49
    const RESOURCE_FOLLOW_USER = 'resource/UserFollowResource/create/';
50
    const RESOURCE_UNFOLLOW_USER = 'resource/UserFollowResource/delete/';
51
    const RESOURCE_USER_INFO = 'resource/UserResource/get/';
52
    const RESOURCE_USER_FOLLOWING = 'resource/UserFollowingResource/get/';
53
    const RESOURCE_USER_PINS = 'resource/UserPinsResource/get/';
54
55
    /**
56
     * Search
57
     */
58
    const RESOURCE_SEARCH = 'resource/BaseSearchResource/get/';
59
    const RESOURCE_SEARCH_WITH_PAGINATION = 'resource/SearchResource/get/';
60
61
    /**
62
     * Interests.
63
     */
64
    const RESOURCE_FOLLOW_INTEREST = 'resource/InterestFollowResource/create/';
65
    const RESOURCE_UNFOLLOW_INTEREST = 'resource/InterestFollowResource/delete/';
66
    const RESOURCE_FOLLOWING_INTERESTS = 'resource/InterestFollowingResource/get/';
67
68
    /**
69
     * Conversations.
70
     */
71
    const RESOURCE_SEND_MESSAGE = 'resource/ConversationsResource/create/';
72
    const RESOURCE_GET_LAST_CONVERSATIONS = 'resource/ConversationsResource/get/';
73
74
    /**
75
     * UserSettings
76
     */
77
    const RESOURCE_UPDATE_USER_SETTINGS = 'resource/UserSettingsResource/update/';
78
79
    /**
80
     * News
81
     */
82
    const RESOURCE_GET_LATEST_NEWS = 'resource/NetworkStoriesResource/get/';
83
84
    /**
85
     * Registration
86
     */
87
    const RESOURCE_CREATE_REGISTER = 'resource/UserRegisterResource/create/';
88
    const RESOURCE_CHECK_EMAIL = 'resource/EmailExistsResource/get';
89
    const RESOURCE_SET_ORIENTATION = 'resource/OrientationContextResource/create/';
90
    const RESOURCE_UPDATE_REGISTRATION_TRACK = 'resource/UserRegisterTrackActionResource/update/';
91
    const RESOURCE_REGISTRATION_COMPLETE = 'resource/UserExperienceCompletedResource/update/';
92
    const RESOURCE_CONVERT_TO_BUSINESS = 'resource/PartnerResource/update/';
93
94
    /**
95
     * Uploads
96
     */
97
    const IMAGE_UPLOAD = 'upload-image/';
98
99
    /**
100
     * Categories
101
     */
102
    const RESOURCE_GET_CATEGORIES = 'resource/CategoriesResource/get/';
103
    const RESOURCE_GET_CATEGORY = 'resource/CategoryResource/get/';
104
    const RESOURCE_GET_CATEGORIES_RELATED = 'resource/RelatedInterestsResource/get/';
105
    const RESOURCE_GET_CATEGORY_FEED = 'resource/CategoryFeedResource/get';
106
107
    /**
108
     * Topics
109
     */
110
    const RESOURCE_GET_TOPIC_FEED = 'resource/TopicFeedResource/get';
111
    const RESOURCE_GET_TOPIC = 'resource/TopicResource/get';
112
113
    const URL_BASE = 'https://uk.pinterest.com/';
114
    const HOST = 'uk.pinterest.com';
115
116
    const FOLLOWING_INTERESTS = 'interests';
117
    const FOLLOWING_PEOPLE = 'people';
118
    const FOLLOWING_BOARDS = 'boards';
119
120
    /**
121
     * @param array $request
122
     *
123
     * @return mixed
124
     */
125
    public static function buildRequestString($request)
126
    {
127
        return self::fixEncoding(http_build_query($request));
128
    }
129
130
    /**
131
     * Appends resource url to base pinterest url.
132
     *
133
     * @param string $resourceUrl
134
     *
135
     * @return string
136
     */
137
    public static function buildApiUrl($resourceUrl)
138
    {
139
        return self::URL_BASE . $resourceUrl;
140
    }
141
142
    /**
143
     * Fix URL-encoding for some characters.
144
     *
145
     * @param string $str
146
     *
147
     * @return string
148
     */
149
    public static function fixEncoding($str)
150
    {
151
        return str_replace(
152
            ['%28', '%29', '%7E'], ['(', ')', '~'], $str
153
        );
154
    }
155
156
    /**
157
     * Return Pinterest API url for search requests.
158
     *
159
     * @param array $bookmarks
160
     * 
161
     * @return string
162
     */
163
    public static function getSearchUrl($bookmarks = [])
164
    {
165
        return empty($bookmarks) ?
166
            self::RESOURCE_SEARCH :
167
            self::RESOURCE_SEARCH_WITH_PAGINATION;
168
    }
169
170
    /**
171
     * @param string $type
172
     * @return string|null
173
     */
174
    public static function getFollowingUrlByType($type)
175
    {
176
        $urls = [
177
            self::FOLLOWING_INTERESTS => self::RESOURCE_FOLLOWING_INTERESTS,
178
            self::FOLLOWING_BOARDS    => self::RESOURCE_FOLLOWING_BOARDS,
179
            self::FOLLOWING_PEOPLE    => self::RESOURCE_USER_FOLLOWING,
180
        ];
181
182
        if(array_key_exists($type, $urls)) {
183
            return $urls[$type];
184
        }
185
186
        return null;
187
    }
188
}
189