Этот сайт не работает или это только я?

13

Вызов

Задача проста: с помощью http://isup.me определить, работает ли введенный веб-сайт или нет.

Если сайт работает, вы должны вернуть истинное значение, а если сайт не работает, вы должны вернуть ложное значение.

правила

На входе будет веб-адрес, такой как stackexchange.comили google.co.uk. У ввода никогда не будет http://и https://т. Д. В начале строки, но может быть www.или codegolf.в начале и т. Д.

Вы должны использовать сайт, isup.me/URLгде URL является вводом.

Когда сайт запущен, он будет выглядеть так:

http://isup.me/codegolf.stackexchange.com

Если сайт не работает, он будет выглядеть так:

http://isup.me/does.not.exist

Сокращения URL запрещены, кроме isup.me.

Пример входных данных

Вероятно, вверх (в зависимости от текущих обстоятельств):

google.de
codegolf.stackexchange.com
worldbuilding.meta.stackexchange.com
tio.run
store.nascar.com
isup.me

Будет вниз:

made.up.com
fake.com.us
why.why.why.delilah
store.antarcticrhubarbassociation.an

выигрыш

Самый короткий код в байтах побеждает.

Бета распад
источник
21
Кстати, "made.up.co.uk" на самом деле.
GiantTree
8
Я только что зарегистрировался, fake.com.usчтобы связываться с вашими тестами.
МКЦ
14
Но что, если isup.meне работает?
Okx
2
@ Окс Ты уверен, что это не только ты?
Пьер Арло
3
Рекомендуемый случай испытания: isup.me. Он возвращает результат, отличный от того, что, скажем, google.comможет вернуть.
Okx

Ответы:

16

sh (+ curl + grep), 28 26 байт

curl -L isup.me/$1|grep ^I

Выходы через состояние выхода (0 для повышения, 1 для снижения). Ищет Iв начале строки, которая соответствует, когда домен открыт (даже для особого случая isup.me/isup.me ).

Андерс Касеорг
источник
1
curl -L isup.me/$1|grep u!сохраняет 1 байт. Это предполагает это! не является допустимым символом в имени домена.
Правда 0ли в ш?
Лохматый
1
0действительно верно в sh, причем все ненулевые значения ложны. Кроме того, IMO очень приятно, что версия sh такая короткая, поскольку это абсолютно подходящий язык для этой задачи, даже без учета игры в гольф.
Score_Under
Тем не менее, это потерпит неудачу на что-то вроде spthissitedoesntexist.invalid
Score_Under
1
Это соответствует на моей машине. Это соответствует этому биту: в <a href="http://spthissitedoesntexist.invalid" class="domain">spthissitedoesntexist.invalid</a>частности, оно соответствует внутри href.
Score_Under
5

Stacked , 44 байта

['http://isup.me/'\+[CS'!'eq sum 2=out]curl]

Асинхронная функция, которая выводит, 0если сайт не работает, и любой другой номер больше, чем 0если он работает.

Пример а:

['http://isup.me/'\+['s u'split#'1-put]curl] @:isup

'Is google up?' put 'google.com' isup

Вывод (вероятно): Is google up? 1

Конор О'Брайен
источник
Можете ли вы добавить ссылку на страницу с накоплением GH?
вниз
@ Downgoat Готово.
Конор О'Брайен,
Если это проверка на наличие s u, обратите внимание, что это происходит на любом входе, начиная с u(вверх или вниз).
Андерс Касеорг
@AndersKaseorg Исправлено, спасибо.
Конор О'Брайен,
Лучший пример: 'Is example.com up?' put 'example.com' isupвыходные данные (не только вероятно, но и верно):Is example.com up? 1
Эрик Аутгольфер
4

Kotlin REPL - 131 108 106 93 79 55 53 64 63 байта

Сначала попробуйте в гольф Kotlin.
Ожидает веб-сайт в переменной или значении с именем a.

Теперь с уменьшенным пробелом.
Кто сказал, что "Лоо" не достаточно?
Исправлено и короче, больше не зависит от http://isup.me .
Не нужно самим открывать соединение, просто получить поток данных (или нет)
Задача состояла в том, чтобы использовать http://isup.me , верно? Кроме того: <недопустимый символ в URL.
Теперь работает isup.meкак веб-сайт

Теперь читает веб-сайт как строку, потому что нельзя предполагать, что переменная будет содержать веб-сайт.

"m h" !in java.net.URL("http://isup.me/"+readLine()).readText()

Читает одну строку, содержащую только сайт.
Проверяет, какая m hчасть from hereотправляется, когда сайт не работает.

Возвращает «истина» или «ложь» соответственно.


Как лямбда - 172 120 118 99 85 67 66 байт

{a:String->"m h" !in java.net.URL("http://isup.me/$a").readText()}

Может быть вызван напрямую:

{ ... }("google.com")
GiantTree
источник
простите, если я ошибаюсь, но разве это не может быть легко преобразовано в лямбду?
Ник Клиффорд,
@NickClifford, конечно, но на самом деле это будет дольше из-за определения аргумента и типа (15 символов, потому что здесь не работает вывод типов)
GiantTree
3
Я не знаю языка, но кажется, что вы проверяете, есть ли в указанном тексте слово "loo". Разве это не тот случай, когда этот текст также возвращает (переменное) имя сайта? И если это так, значит ли это, что вы получаете ложные негативы для таких сайтов, как loo.com?
Коул
@ Кол, вы определенно правы, я полностью забыл об этом (я только тестировал Google и поддельный веб-сайт). Я
обновлю
Этот не удастся на сайтах с looименем. electric.boogalooне существует, но строка looбудет в выводе там.
Score_Under
2

Python 2 или 3 с запросами ( 70 69 68 байт)

from requests import*;lambda u:"u. "in get("http://isup.me/"+u).text

Побритый 1 байт: "u. "" u" Нет, недопустимая оптимизация.
1 байт побрился: __import__('requests').from requests import*;

Теперь это действительно фрагмент кода только для REPL, и после запуска этой строки будет названа функция _.

Score_Under
источник
1
Синтаксическая ошибка в конце (возможно, заблудшая )).
Эрик Outgolfer
1
Сбой для входов, начинающихся с u.
Эрик Outgolfer
1
Использование from requests import*и getна 1 байт короче.
mbomb007
1
это не только REPL, разрешено отвечать с неназванными функциями (лямбды в питоне)
Felipe Nardi Batista
Это безымянная функция, но сценарий в целом нельзя использовать в качестве выражения (поскольку он использует import), поэтому я думаю, что безопаснее просто назвать его строкой REPL.
Score_Under
2

Python3 141 133 113 192 141 байт

Требуется Selenium (включая веб-драйвер) для Python.

Спасибо @cairdcoinheringaahing за сокращение 42 байта!
Спасибо @ V.Courtois за указание на простое исправление!

from selenium import*
d=webdriver.Firefox();d.get("http://isup.me/"+input());print("up"in d.find_element_by_xpath("//*[@id='content']/p[1]"))

Печатает, 1если сайт запущен и работает, иначе печатает 0.

Безголовая версия:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
urlToTest = "www.f.com"
driver = webdriver.Firefox()
driver.get("http://downforeveryoneorjustme.com/"+urlToTest)
res = driver.find_element_by_xpath("//*[@id='content']/p[1]")
print(1 if "up" in res.text else 0)
Рахул Бхарадвадж
источник
Они сказали, что isup.me хорошо в комментариях; Вы можете выиграть несколько байтов :)
V. Courtois
1
-1 Это фрагмент. Требуются полные программы или функции, и ввод данных не может быть принят в переменную (такую ​​как t). Кроме того, вы можете print("up"in r.text)
caird coinheringaahing
@cairdcoinheringaahing Хорошо, внесу эти изменения, спасибо! Это мой второй ответ, поэтому я не знал, опубликовать ли фрагмент или полноценную программу. Поэтому я разместил оба.
Рахул Бхарадвад
141 байт
caird coinheringaahing
2

Javascript (ES6), 74 66 байт

f=s=>fetch('//isup.me/'+s).then(r=>r.text()).then(t=>/u!/.test(t))

Спасибо @Shaggy, который обратил мое внимание на то, что решенное обещание считается результатом.

Проблема с этим решением в том, что он выдаст ошибку CORS, если я не протестирую ее на странице, которая уже есть isup.me. Но в настоящее время это перенаправляется наdownforeveryoneorjustme.com

Старая версия:

е = s => выборки ( '// isup.me/'+s).then(r=>r.text()).then(t=>alert(t.match(/u!/)))

Кристиан Вестербик
источник
1
Вы можете избавиться от alertи просто вернуть обещание. Смотрите здесь . Я думаю, вы также можете сэкономить /u!/.test(t).
Лохматый
1

Pyth , 24 байта

}" u"s'+"http://isup.me/

Вернуть, Trueесли сайт работает, в Falseпротивном случае. Входной URL должен быть в кавычках. Это не может быть проверено на онлайн-переводчике, потому что 'он отключен по соображениям безопасности; вместо этого вам понадобится локальная копия Pyth .

объяснение

                        Q    # Implicit input
       +"http://isup.me/     # Concatenate "http://isup.me/" with the input
      '                      # Open the URL
     s                       # Concatenate all the lines of the returned HTML page
}" u"                        # Test whether " u" is in the page or not
Джим
источник
1
Сбой для входов, начинающихся с u.
Эрик Outgolfer
1

PowerShell, 32 байта

(iwr isup.me/$args)-notmatch'u!'
TessellatingHeckler
источник
Пропустил ваш ответ, прежде чем я отправил мой извините! какое-то странное irmповедение спасло меня от этого. мой здесь
colsw
1

PowerShell, 25 байт

!(irm isup.me/$args).html

Использует тот факт, что Invoke-RestMethodвозвращает страницу с.html свойством только при неудаче. (понятия не имею, почему именно это происходит ...)

инвертирует строку для преобразования в bool, выходные данные Trueдля живого сайта или Falseдля сайта вниз.

PS C:\Users\sweeneyc\Desktop> .\Test-SiteUp.ps1 "connorlsw.com"
True
PS C:\Users\sweeneyc\Desktop> .\Test-SiteUp.ps1 "connorlsw.notawebsite"
False
PS C:\Users\sweeneyc\Desktop> .\Test-SiteUp.ps1 "google.com"
True
PS C:\Users\sweeneyc\Desktop> .\Test-SiteUp.ps1 "isthisreallyasite.com"
False
colsw
источник
@TessellatingHeckler irmвозвращает открытый текст для непарсируемых страниц, я собирался сделать совпадение открытого текста, чтобы он вел себя так же, как iwr, независимо от того, думаю, если он работает, он работает.
Colsw
1

Halovi , 20 байтов

oisup.me/⁰
\p
ye$hd0

Выводится, p.если сайт не работает, и e.если он работает.

Объяснение:

oisup.me/⁰  ~# Open the concatination of "isup.me/" and arg0
\p          ~# Select first p element
ye$hd0      ~# Edit text with neovim and output result:
            ~#   Go one character before the end of the line and ..
            ~#   delete until beginning
судейская шапочка
источник
1

Haskell (Lambdabot), 157 байт

import Data.ByteString.Lazy.Char8
import Network.HTTP.Simple
f s=httpLBS(parseRequest_$"http://isup.me/"++s)>>=print.not.isInfixOf"u!".unpack.getResponseBody

К сожалению , вы не можете импортировать Network.HTTP.Simpleна tio.runсамый простой способ тестирования было бы запустить этот скрипт (вам нужно stack):

#!/usr/bin/env stack
-- stack --install-ghc --resolver lts-8.19 runghc --package http-conduit

import Data.ByteString.Lazy.Char8
import Network.HTTP.Simple
import Data.List

main :: IO ()
main = mapM_ test [ "google.de", "made.up.com"]
  where test url = print ("testing "++url) >> f url

f :: String -> IO ()
f s=httpLBS(parseRequest_$"http://isup.me/"++s)
 >>=print.not.isInfixOf"u!".unpack.getResponseBody
ბიმო
источник
0

Go, 111 байт

В типичной манере Го самый короткий метод - это раскошелиться.

import"os/exec"
func h(a string)bool{return exec.Command("sh","-c","curl -L isup.me/"+a+"|grep ^I").Run()!=nil}

Другие реализации здесь: https://play.golang.org/p/8T5HSDQFmC

Эрик Лагергрен
источник
0

Clojure, 63 байта

#(clojure.string/includes?(slurp(str"http://isup.me/"%))"'s j")

Проверяет , является ли HTML , возвращаемый slurpсодержит строку "'s j"(как в «Это «Sj усть вас»). Я мог бы найти строку меньшего размера, которая уникальна для страницы, но в лучшем случае это сэкономило бы мне 2 байта. Это также может сделать его менее точным. «j» не будет появляться в разметке где-либо, кроме как в этом сценарии. Строка типа "U". однако потенциально может появиться в URL, что может его сломать.

(defn is-up? [site]
  (clojure.string/includes?
    (slurp (str "http://isup.me/" site))
    "'s j"))
Carcigenicate
источник
0

Ним, 108 байт

import httpclient,strutils
echo newhttpclient().getcontent("//isup.me/"&stdin.readline.string).find("ks ")<0

К сожалению, strutilsэто необходимо дляcontains .

Учимся Ним, советы приветствуются!

Quelklef
источник
0

PHP, 82 78 байт

<?=$i=$argv[1],+!preg_match("/!.*$i/",file_get_contents("http://isup.me/$i"));

Пример ввода / вывода работает:

$ php script.php google.com
> google.com1

Пример 2

$ php script.php does.not.exist
> does.not.exist0
койка
источник
Почти самое короткое возможное решение. Пустой вывод также является «ложным значением», так что вы можете удалить +. И $argnвместо $argv[1]вас можно использовать еще 6 (минус 1) байтов.
Тит