forked from lolcat/4get
		
	
		
			
				
	
	
		
			379 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			379 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| class yep{
 | |
| 	
 | |
| 	public function __construct(){
 | |
| 		
 | |
| 		include "lib/backend.php";
 | |
| 		$this->backend = new backend("yep");
 | |
| 	}
 | |
| 	
 | |
| 	public function getfilters($page){
 | |
| 		
 | |
| 		return [
 | |
| 			"country" => [
 | |
| 				"display" => "Country",
 | |
| 				"option" => [
 | |
| 					"all" => "All regions",
 | |
| 					"af" => "Afghanistan",
 | |
| 					"al" => "Albania",
 | |
| 					"dz" => "Algeria",
 | |
| 					"as" => "American Samoa",
 | |
| 					"ad" => "Andorra",
 | |
| 					"ao" => "Angola",
 | |
| 					"ai" => "Anguilla",
 | |
| 					"ag" => "Antigua and Barbuda",
 | |
| 					"ar" => "Argentina",
 | |
| 					"am" => "Armenia",
 | |
| 					"aw" => "Aruba",
 | |
| 					"au" => "Australia",
 | |
| 					"at" => "Austria",
 | |
| 					"az" => "Azerbaijan",
 | |
| 					"bs" => "Bahamas",
 | |
| 					"bh" => "Bahrain",
 | |
| 					"bd" => "Bangladesh",
 | |
| 					"bb" => "Barbados",
 | |
| 					"by" => "Belarus",
 | |
| 					"be" => "Belgium",
 | |
| 					"bz" => "Belize",
 | |
| 					"bj" => "Benin",
 | |
| 					"bt" => "Bhutan",
 | |
| 					"bo" => "Bolivia",
 | |
| 					"ba" => "Bosnia and Herzegovina",
 | |
| 					"bw" => "Botswana",
 | |
| 					"br" => "Brazil",
 | |
| 					"bn" => "Brunei Darussalam",
 | |
| 					"bg" => "Bulgaria",
 | |
| 					"bf" => "Burkina Faso",
 | |
| 					"bi" => "Burundi",
 | |
| 					"cv" => "Cabo Verde",
 | |
| 					"kh" => "Cambodia",
 | |
| 					"cm" => "Cameroon",
 | |
| 					"ca" => "Canada",
 | |
| 					"ky" => "Cayman Islands",
 | |
| 					"cf" => "Central African Republic",
 | |
| 					"td" => "Chad",
 | |
| 					"cl" => "Chile",
 | |
| 					"cn" => "China",
 | |
| 					"co" => "Colombia",
 | |
| 					"cg" => "Congo",
 | |
| 					"cd" => "Congo, Democratic Republic",
 | |
| 					"ck" => "Cook Islands",
 | |
| 					"cr" => "Costa Rica",
 | |
| 					"hr" => "Croatia",
 | |
| 					"cu" => "Cuba",
 | |
| 					"cy" => "Cyprus",
 | |
| 					"cz" => "Czechia",
 | |
| 					"ci" => "Côte d'Ivoire",
 | |
| 					"dk" => "Denmark",
 | |
| 					"dj" => "Djibouti",
 | |
| 					"dm" => "Dominica",
 | |
| 					"do" => "Dominican Republic",
 | |
| 					"ec" => "Ecuador",
 | |
| 					"eg" => "Egypt",
 | |
| 					"sv" => "El Salvador",
 | |
| 					"gq" => "Equatorial Guinea",
 | |
| 					"ee" => "Estonia",
 | |
| 					"et" => "Ethiopia",
 | |
| 					"fo" => "Faroe Islands",
 | |
| 					"fj" => "Fiji",
 | |
| 					"fi" => "Finland",
 | |
| 					"fr" => "France",
 | |
| 					"gf" => "French Guiana",
 | |
| 					"pf" => "French Polynesia",
 | |
| 					"ga" => "Gabon",
 | |
| 					"gm" => "Gambia",
 | |
| 					"ge" => "Georgia",
 | |
| 					"de" => "Germany",
 | |
| 					"gh" => "Ghana",
 | |
| 					"gi" => "Gibraltar",
 | |
| 					"gr" => "Greece",
 | |
| 					"gl" => "Greenland",
 | |
| 					"gd" => "Grenada",
 | |
| 					"gp" => "Guadeloupe",
 | |
| 					"gu" => "Guam",
 | |
| 					"gt" => "Guatemala",
 | |
| 					"gg" => "Guernsey",
 | |
| 					"gn" => "Guinea",
 | |
| 					"gy" => "Guyana",
 | |
| 					"ht" => "Haiti",
 | |
| 					"hn" => "Honduras",
 | |
| 					"hk" => "Hong Kong",
 | |
| 					"hu" => "Hungary",
 | |
| 					"is" => "Iceland",
 | |
| 					"in" => "India",
 | |
| 					"id" => "Indonesia",
 | |
| 					"iq" => "Iraq",
 | |
| 					"ie" => "Ireland",
 | |
| 					"im" => "Isle of Man",
 | |
| 					"il" => "Israel",
 | |
| 					"it" => "Italy",
 | |
| 					"jm" => "Jamaica",
 | |
| 					"jp" => "Japan",
 | |
| 					"je" => "Jersey",
 | |
| 					"jo" => "Jordan",
 | |
| 					"kz" => "Kazakhstan",
 | |
| 					"ke" => "Kenya",
 | |
| 					"ki" => "Kiribati",
 | |
| 					"kw" => "Kuwait",
 | |
| 					"kg" => "Kyrgyzstan",
 | |
| 					"la" => "Lao People's Democratic Republic",
 | |
| 					"lv" => "Latvia",
 | |
| 					"lb" => "Lebanon",
 | |
| 					"ls" => "Lesotho",
 | |
| 					"ly" => "Libya",
 | |
| 					"li" => "Liechtenstein",
 | |
| 					"lt" => "Lithuania",
 | |
| 					"lu" => "Luxembourg",
 | |
| 					"mk" => "Macedonia",
 | |
| 					"mg" => "Madagascar",
 | |
| 					"mw" => "Malawi",
 | |
| 					"my" => "Malaysia",
 | |
| 					"mv" => "Maldives",
 | |
| 					"ml" => "Mali",
 | |
| 					"mt" => "Malta",
 | |
| 					"mq" => "Martinique",
 | |
| 					"mr" => "Mauritania",
 | |
| 					"mu" => "Mauritius",
 | |
| 					"yt" => "Mayotte",
 | |
| 					"mx" => "Mexico",
 | |
| 					"fm" => "Micronesia, Federated States of",
 | |
| 					"md" => "Moldova",
 | |
| 					"mc" => "Monaco",
 | |
| 					"mn" => "Mongolia",
 | |
| 					"me" => "Montenegro",
 | |
| 					"ms" => "Montserrat",
 | |
| 					"ma" => "Morocco",
 | |
| 					"mz" => "Mozambique",
 | |
| 					"mm" => "Myanmar",
 | |
| 					"na" => "Namibia",
 | |
| 					"nr" => "Nauru",
 | |
| 					"np" => "Nepal",
 | |
| 					"nl" => "Netherlands",
 | |
| 					"nc" => "New Caledonia",
 | |
| 					"nz" => "New Zealand",
 | |
| 					"ni" => "Nicaragua",
 | |
| 					"ne" => "Niger",
 | |
| 					"ng" => "Nigeria",
 | |
| 					"nu" => "Niue",
 | |
| 					"no" => "Norway",
 | |
| 					"om" => "Oman",
 | |
| 					"pk" => "Pakistan",
 | |
| 					"ps" => "Palestine, State of",
 | |
| 					"pa" => "Panama",
 | |
| 					"pg" => "Papua New Guinea",
 | |
| 					"py" => "Paraguay",
 | |
| 					"pe" => "Peru",
 | |
| 					"ph" => "Philippines",
 | |
| 					"pn" => "Pitcairn",
 | |
| 					"pl" => "Poland",
 | |
| 					"pt" => "Portugal",
 | |
| 					"pr" => "Puerto Rico",
 | |
| 					"qa" => "Qatar",
 | |
| 					"ro" => "Romania",
 | |
| 					"ru" => "Russian Federation",
 | |
| 					"rw" => "Rwanda",
 | |
| 					"re" => "Réunion",
 | |
| 					"sh" => "Saint Helena",
 | |
| 					"kn" => "Saint Kitts and Nevis",
 | |
| 					"lc" => "Saint Lucia",
 | |
| 					"vc" => "Saint Vincent and the Grenadines",
 | |
| 					"ws" => "Samoa",
 | |
| 					"sm" => "San Marino",
 | |
| 					"st" => "Sao Tome and Principe",
 | |
| 					"sa" => "Saudi Arabia",
 | |
| 					"sn" => "Senegal",
 | |
| 					"rs" => "Serbia",
 | |
| 					"sc" => "Seychelles",
 | |
| 					"sl" => "Sierra Leone",
 | |
| 					"sg" => "Singapore",
 | |
| 					"sk" => "Slovakia",
 | |
| 					"si" => "Slovenia",
 | |
| 					"sb" => "Solomon Islands",
 | |
| 					"so" => "Somalia",
 | |
| 					"kr" => "Sourth Korea",
 | |
| 					"za" => "South Africa",
 | |
| 					"es" => "Spain",
 | |
| 					"lk" => "Sri Lanka",
 | |
| 					"sr" => "Suriname",
 | |
| 					"se" => "Sweden",
 | |
| 					"ch" => "Switzerland",
 | |
| 					"tw" => "Taiwan",
 | |
| 					"tj" => "Tajikistan",
 | |
| 					"tz" => "Tanzania",
 | |
| 					"th" => "Thailand",
 | |
| 					"tl" => "Timor-Leste",
 | |
| 					"tg" => "Togo",
 | |
| 					"tk" => "Tokelau",
 | |
| 					"to" => "Tonga",
 | |
| 					"tt" => "Trinidad and Tobago",
 | |
| 					"tn" => "Tunisia",
 | |
| 					"tr" => "Turkey",
 | |
| 					"tm" => "Turkmenistan",
 | |
| 					"ug" => "Uganda",
 | |
| 					"ua" => "Ukraine",
 | |
| 					"ae" => "United Arab Emirates",
 | |
| 					"gb" => "United Kingdom",
 | |
| 					"us" => "United States",
 | |
| 					"uy" => "Uruguay",
 | |
| 					"uz" => "Uzbekistan",
 | |
| 					"vu" => "Vanuatu",
 | |
| 					"ve" => "Venezuela",
 | |
| 					"vn" => "Vietnam",
 | |
| 					"vg" => "Virgin Islands, British",
 | |
| 					"vi" => "Virgin Islands, U.S.",
 | |
| 					"ye" => "Yemen",
 | |
| 					"zm" => "Zambia",
 | |
| 					"zw" => "Zimbabwe"
 | |
| 				]
 | |
| 			],
 | |
| 			"nsfw" => [
 | |
| 				"display" => "NSFW",
 | |
| 				"option" => [
 | |
| 					"yes" => "Yes",
 | |
| 					"maybe" => "Maybe",
 | |
| 					"no" => "No"
 | |
| 				]
 | |
| 			]
 | |
| 		];
 | |
| 	}
 | |
| 	
 | |
| 	private function get($proxy, $url, $get = []){
 | |
| 		
 | |
| 		$curlproc = curl_init();
 | |
| 		
 | |
| 		if($get !== []){
 | |
| 			$get = http_build_query($get);
 | |
| 			$url .= "?" . $get;
 | |
| 		}
 | |
| 		
 | |
| 		curl_setopt($curlproc, CURLOPT_URL, $url);
 | |
| 		
 | |
| 		curl_setopt($curlproc, CURLOPT_ENCODING, ""); // default encoding
 | |
| 		curl_setopt($curlproc, CURLOPT_HTTPHEADER,
 | |
| 			["User-Agent: " . config::USER_AGENT,
 | |
| 			"Accept: */*",
 | |
| 			"Accept-Language: en-US,en;q=0.5",
 | |
| 			"Accept-Encoding: gzip",
 | |
| 			"DNT: 1",
 | |
| 			"Origin: https://yep.com",
 | |
| 			"Referer: https://yep.com/",
 | |
| 			"Connection: keep-alive",
 | |
| 			"Sec-Fetch-Dest: empty",
 | |
| 			"Sec-Fetch-Mode: cors",
 | |
| 			"Sec-Fetch-Site: same-site"]
 | |
| 		);
 | |
| 		
 | |
| 		curl_setopt($curlproc, CURLOPT_RETURNTRANSFER, true);
 | |
| 		curl_setopt($curlproc, CURLOPT_SSL_VERIFYHOST, 2);
 | |
| 		curl_setopt($curlproc, CURLOPT_SSL_VERIFYPEER, true);
 | |
| 		curl_setopt($curlproc, CURLOPT_CONNECTTIMEOUT, 30);
 | |
| 		curl_setopt($curlproc, CURLOPT_TIMEOUT, 30);
 | |
| 
 | |
| 		$this->backend->assign_proxy($curlproc, $proxy);
 | |
| 		
 | |
| 		$data = curl_exec($curlproc);
 | |
| 		
 | |
| 		if(curl_errno($curlproc)){
 | |
| 			
 | |
| 			throw new Exception(curl_error($curlproc));
 | |
| 		}
 | |
| 		
 | |
| 		curl_close($curlproc);
 | |
| 		return $data;
 | |
| 	}
 | |
| 	
 | |
| 	public function image($get){
 | |
| 		
 | |
| 		$search = $get["s"];
 | |
| 		if(strlen($search) === 0){
 | |
| 			
 | |
| 			throw new Exception("Search term is empty!");
 | |
| 		}
 | |
| 		
 | |
| 		$country = $get["country"];
 | |
| 		$nsfw = $get["nsfw"];
 | |
| 		
 | |
| 		switch($nsfw){
 | |
| 			
 | |
| 			case "yes": $nsfw = "off"; break;
 | |
| 			case "maybe": $nsfw = "moderate"; break;
 | |
| 			case "no": $nsfw = "strict"; break;
 | |
| 		}
 | |
| 		
 | |
| 		$out = [
 | |
| 			"status" => "ok",
 | |
| 			"npt" => null,
 | |
| 			"image" => []
 | |
| 		];
 | |
| 		
 | |
| 		try{
 | |
| 			
 | |
| 			$json =
 | |
| 				json_decode(
 | |
| 					$this->get(
 | |
| 						$this->backend->get_ip(), // no nextpage!
 | |
| 						"https://api.yep.com/fs/2/search",
 | |
| 						[
 | |
| 							"client" => "web",
 | |
| 							"gl" => $country == "all" ? $country : strtoupper($country),
 | |
| 							"no_correct" => "false",
 | |
| 							"q" => $search,
 | |
| 							"safeSearch" => $nsfw,
 | |
| 							"type" => "images"
 | |
| 						]
 | |
| 					),
 | |
| 					true
 | |
| 				);
 | |
| 		}catch(Exception $error){
 | |
| 			
 | |
| 			throw new Exception("Failed to fetch JSON");
 | |
| 		}
 | |
| 		
 | |
| 		if($json === null){
 | |
| 			
 | |
| 			throw new Exception("Failed to decode JSON");
 | |
| 		}
 | |
| 		
 | |
| 		foreach($json[1]["results"] as $item){
 | |
| 			
 | |
| 			if(
 | |
| 				$item["width"] !== 0 &&
 | |
| 				$item["height"] !== 0
 | |
| 			){
 | |
| 				
 | |
| 				$thumb_width = $item["width"] >= 260 ? 260 : $item["width"];
 | |
| 				$thumb_height = ceil($item["height"] * ($thumb_width / $item["width"]));
 | |
| 				
 | |
| 				$width = $item["width"];
 | |
| 				$height = $item["height"];
 | |
| 			}else{
 | |
| 				
 | |
| 				$thumb_width = null;
 | |
| 				$thumb_height = null;
 | |
| 				$width = null;
 | |
| 				$height = null;
 | |
| 			}
 | |
| 			
 | |
| 			$out["image"][] = [
 | |
| 				"title" => $item["title"],
 | |
| 				"source" => [
 | |
| 					[
 | |
| 						"url" => $item["image_id"],
 | |
| 						"width" => $width,
 | |
| 						"height" => $height
 | |
| 					],
 | |
| 					[
 | |
| 						"url" => $item["src"],
 | |
| 						"width" => $thumb_width,
 | |
| 						"height" => $thumb_height
 | |
| 					]
 | |
| 				],
 | |
| 				"url" => $item["host_page"]
 | |
| 			];
 | |
| 		}
 | |
| 		
 | |
| 		return $out;
 | |
| 	}
 | |
| }
 |