×
HeadHunter and Superjob rezume updater on Ruby on Rails (21 авг 2017)

Практикуемся в написании кода под rails.

Вопрос Astronomy Picture of the Day

Больше
2 года 4 мес. назад - 2 года 4 мес. назад #1 от Aleksej
Aleksej создал эту тему: Astronomy Picture of the Day
Аннотация статьи блога Astronomy Picture of the Day на вашем сайте ;
здесь же публикую два скрипта, о которых речь по ссылке.
Первый; предоставляет возможность получения изображений с NASA'S DATA PORTAL помимо API, но требует PHP Simple HTML DOM Parser :


<?php
function randomImage(){
  $best_images = Array( 
		"http://apod.nasa.gov/apod/image/1210/geyseraurora_howell_2163.jpg",
		"http://apod.nasa.gov/apod/image/1210/meteorviolet_salomonsen_1200.jpg", 
		"http://apod.nasa.gov/apod/image/1010/hartley2pacman_fernandez.jpg",
		"http://apod.nasa.gov/apod/image/1007/ISS023-E-58455lrg.jpg"
	);
	return $best_images[rand(0, count($best_images)-1)];
}
function isNotFound($url){
	$response = get_headers($url, 1);
	$response = explode(" ", $response[0]);
	$response = $response[1];
	if ($response=="404") return true;
	else return false;
}
include('simple_html_dom.php');
$url="http://apod.nasa.gov";
$html=file_get_html($url);
$img = $html->find('img', 0)->parent->href;
if ($img=='') $img = randomImage();
else{
	$img="http://apod.nasa.gov/apod/".$img;
	if (isNotFound($img)) $img = randomImage();
}
header("location: ".$img); 
?>


; и второй, уже разобранный на форуме. Вкупе со стилями он может выглядеть у вас следующим образом... или же как-то иначе:


<?
$json = file_get_contents('https://api.data.gov/nasa/planetary/apod?concept_tags=True&api_key=VASH_API_KEY');
$obj = json_decode($json);
?>

<style type="text/css">
.exp {
font-style: italic;
}
.img_apod img {
width: 600px;
}
</style>

<div class="img_apod"><?='<img src="' . $obj->url . '"/>';?></div>
<p> </p>
<div class="exp"><?=($obj->date);?></div>
<div class="exp"><?=($obj->explanation);?></div>
Последнее редактирование: 2 года 4 мес. назад от Aleksej.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
2 года 4 мес. назад - 2 года 4 мес. назад #2 от Aleksej
Aleksej ответил в теме Astronomy Picture of the Day

Aleksej пишет: здесь же публикую два скрипта, о которых...


Третий скрипт. ;)

Честно говоря, данный API не представляется мне стабильно работающим... бывало - экран остается пустым, бывало - я получал от американцев ответы наподобие:

Hi Alex,
I'm looping in the NASA team.
Gray

Hi Alex, Working on it. Something strange is going on for today's APOD, but it will certainly work tomorrow. Sorry about this.
Dan


Допишем проверку на пустоту для JSON; и добавим массив из нескольких картинок, которые будут рандомно экспонироваться в случае, если с API снова "strange is going":

<?
$best_images = Array( 
		"http://apod.nasa.gov/apod/image/1210/geyseraurora_howell_2163.jpg",
		"http://apod.nasa.gov/apod/image/1210/meteorviolet_salomonsen_1200.jpg", 
		"http://apod.nasa.gov/apod/image/1010/hartley2pacman_fernandez.jpg",
		"http://apod.nasa.gov/apod/image/1007/ISS023-E-58455lrg.jpg"
	);

$json = file_get_contents('https://api.data.gov/nasa/planetary/apod?concept_tags=True&api_key=VASH_API_KEY');
$obj = json_decode($json);

if(empty($json)){
$rand_keys = array_rand($best_images, 1);
echo '<img src="' . $best_images[$rand_keys] . '"/>';
}
Последнее редактирование: 2 года 4 мес. назад от p.rishard.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
2 года 4 мес. назад #3 от evgenij
evgenij ответил в теме Astronomy Picture of the Day

Aleksej пишет: Допишем проверку на пустоту для JSON


а JSON у них, кстати, не пустой, даже если не содержит картинки:

{"message": "Your request could not be processed. Admins have been notified.", "error": "No APOD imagery for the given date."}

:)

Дождались! Fedora 26.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
2 года 4 мес. назад - 2 года 4 мес. назад #4 от Aleksej
Aleksej ответил в теме Astronomy Picture of the Day
Ну вот так , скажем. Привяжемся к 'message'... или к "error".... все равно:

<?
$best_images = Array( 
		"http://apod.nasa.gov/apod/image/1210/geyseraurora_howell_2163.jpg",
		"http://apod.nasa.gov/apod/image/1210/meteorviolet_salomonsen_1200.jpg", 
		"http://apod.nasa.gov/apod/image/1010/hartley2pacman_fernandez.jpg",
		"http://apod.nasa.gov/apod/image/1007/ISS023-E-58455lrg.jpg"
	);

$json = file_get_contents('https://api.data.gov/nasa/planetary/apod?concept_tags=True&api_key=VASH_API_KEY');
$obj = json_decode($json);


if (array_key_exists('message', $obj)) {
$rand_keys = array_rand($best_images, 1);
echo '<img src="' . $best_images[$rand_keys] . '"/>';
}


else {
?>
<style type="text/css">
.exp {
font-style: italic;
}
.img_apod img {
width: auto;
}
</style>

<div class="img_apod"><?='<img src="' . $obj->url . '"/>';?></div>
<p> </p>
<div class="exp"><?=($obj->date);?></div>
<div class="exp"><?=($obj->explanation);?></div>
<?
}
?>
Последнее редактирование: 2 года 4 мес. назад от p.rishard.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
6 мес. 1 нед. назад #5 от Aleksej
Aleksej ответил в теме Astronomy Picture of the Day
Я одного понять не могу, почему этот API постоянно меняется... вроде не принято подобное в среде профессиональной разработки, а для NASA - и вовсе несолидно. Было вот так, как показано далее, сейчас, чтобы скрипт работал - меняем его так, как показано в демке... линк в первом сообщении топика.

<style type="text/css">
.exp {
font-style: italic;
}
.img_apod img {
width: 70%;
}
</style>
<?
$url = 'https://api.nasa.gov/planetary/apod?api_key=******************************';
$obj = json_decode(file_get_contents($url));
$headers = @get_headers($obj->url);
$rest = substr($headers[1], 10);
if(!preg_match("|200|", $headers[5])) {
$best_images = Array( 
"https://apod.nasa.gov/apod/image/1210/geyseraurora_howell_2163.jpg",
"https://apod.nasa.gov/apod/image/1210/meteorviolet_salomonsen_1200.jpg", 
"https://apod.nasa.gov/apod/image/1010/hartley2pacman_fernandez.jpg",
"https://apod.nasa.gov/apod/image/1007/ISS023-E-58455lrg.jpg"
);
$rand_keys = array_rand($best_images, 1);
echo '<div class="img_apod"><img src="' . $best_images[$rand_keys] . '"/>';
} else {
?>
<p> </p>
<div class="img_apod"><?='<img src="' . $rest . '"/>';?></div>
<p> </p>
<div class="exp"><?=($obj->date);?></div>
<p> </p>
<div class="exp"><?=($obj->explanation);?></div>
<?
}
?>

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
6 мес. 2 ч. назад - 5 мес. 4 нед. назад #6 от Aleksej
Aleksej ответил в теме Astronomy Picture of the Day
Добавляем в скрипт поддержку видео Youtube:

<style type="text/css">
.exp {
font-style: italic;
}
.img_apod img {
width: 70%;
}
</style>
<?
$url = 'https://api.nasa.gov/planetary/apod?api_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
$obj = json_decode(file_get_contents($url));
if (strpos($obj->media_type, 'video') !== false) {
    preg_match('#(\.be/|/embed/|/v/|/watch\?v=)([A-Za-z0-9_-]{5,11})#', $obj->url, $matches);
    if (isset($matches[2]) && $matches[2] != '') {
        $YoutubeCode = $matches[2];
    }
    echo '<iframe src="https://www.youtube.com/embed/' . $YoutubeCode . '" type="text/html" width="640" height="360" frameborder="0"></iframe>';
?>
    <p> </p>
    <div class="exp"><?= ($obj->date); ?></div>
<p> </p>
<div class="exp"><?= ($obj->explanation); ?></div>
    <?
} elseif (@fopen($obj->url, 'r')) {
?>
<p> </p>
<div class="img_apod"><?= '<img src="' . $obj->url . '"/>'; ?></div>
<p> </p>
<div class="exp"><?= ($obj->date); ?></div>
<p> </p>
<div class="exp"><?= ($obj->explanation); ?></div>
<?
} else {
    $best_images = Array(
        "https://apod.nasa.gov/apod/image/1210/geyseraurora_howell_2163.jpg",
        "https://apod.nasa.gov/apod/image/1210/meteorviolet_salomonsen_1200.jpg",
        "https://apod.nasa.gov/apod/image/1010/hartley2pacman_fernandez.jpg",
        "https://apod.nasa.gov/apod/image/1007/ISS023-E-58455lrg.jpg"
    );
    $rand_keys   = array_rand($best_images, 1);
    echo '<div class="img_apod"><img src="' . $best_images[$rand_keys] . '"/>';
}
?>
Последнее редактирование: 5 мес. 4 нед. назад от p.rishard.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.