Перейти к содержимому
  • 0
Гость Kartze

Вывод на экран исходников сайта

Вопрос

Гость Kartze

Привет, народ!

Есть старый добрый example.com. С помощью API интернет-карты хочу вывести исходники страницы на экран компьютера, пока что только 25 символов из начала. По идее, на экран должен вылезти следующий кусок:

<!doctype html>
<html>
<hea

Сделал набросок, но на данный момент нет возможности проверить его работоспособность...

Вот оно:

local comp = require("computer")
local com = require("component")
local inet = com.internet

print("checking is http and tcp enabled")
os.sleep(1)
if (inet.isHttpEnabled() == false and inet.isTcpEnabled == false) then
  for i = 1, 2 do
    comp.beep(103, 0.6)
    comp.beep(220, 0.6)
  end
  print("can not reach the fourth wall")
  os.exit()
end

print("welcome flynn")
comp.beep(246, 0.6)
comp.beep(311, 0.2)
comp.beep(246, 0.6)

os.sleep(1)
local handle = inet.connect("http://example.com/")
local content = inet.read(handle, 25)
print("content")

Здесь, по идее, должно быть три исхода:

  1. Программа не работает или не решает поставленную задачу, тогда мне хотелось бы знать, что следовало бы исправить и чему поучиться;
  2. Все работает, как надо.

Помогите, форумчане!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

Можно было просто погуглить как работает интернет.

Задача сводится к трем шагам:

1. послать GET запрос

2. записать поток в строку

3. вывести строку на экран

local component = require("component")
local code, net, data, reason = "", component.internet

if net.isHttpEnabled() then
  local req = net.request("http://example.com")
  while true do
    data, reason = req.read()
    if not data then
      req.close()
      if reason then
        error(reason, 0)
      end
      break
    end
    code = code .. data
  end
end
print(code)
Изменено пользователем Doob

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну с лету не вчитываясь:

 

print("connect")

выдаст тебе на экране "connect", а не текст сайта.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну с лету не вчитываясь:

print("connect")

выдаст тебе на экране "connect", а не текст сайта.

"content"

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
print("content")

ты строку выводишь. напиши print(content) тогда ты будешь выводить переменную

Изменено пользователем Zed

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость Kartze

Ну с лету не вчитываясь:

print("connect")

выдаст тебе на экране "connect", а не текст сайта.

Да, очепятка.

Это все? Или еще есть что-нибудь?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость Kartze

Ап.

Хей, ребят, мне нужна ваша помощь в этой задаче. Это как бы моя домашняя работа, хочу учителя впечатлить, чтобы на олимпиаду и доп. курсы взяли.

В ваших руках счастье чужого человека.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Хей, ребят, мне нужна ваша помощь в этой задаче. Это как бы моя домашняя работа, хочу учителя впечатлить, чтобы на олимпиаду и доп. курсы взяли. В ваших руках счастье чужого человека.

Лучше не отдавать свое счастье в чужие руки. Не у всех руки прямые, могут и сломать твое счастье-то.

Наличие же компьютера с установленным майнкрафтом практически гарантирует и впечатление учителя, и твое участие в олимпиаде.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость Kartze

Наличие же компьютера с установленным майнкрафтом практически гарантирует и впечатление учителя, и твое участие в олимпиаде.

У нас с ней был разговор именно про возможности OpenComputers. Накачал пару программ с данного форума, поставил робота с дискетой maze. Но хочется же что-то свое, вот и пытаюсь :)

Был бы Арбузер Крутого, почитал .lua, сделал вид, будто пытаюсь понять, накриворукавил бы сам что-то...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Раз в чате скинули ссылку на эту тему, покажу как можно оптимизировать способ @Doob.

code = code .. data
Ну вобщем, тут каждый на каждый чанк вызывается конкатенацтя строк. Но в луа неэффективно много раз конкатенировать строки. Вместо этого лучше создать буффер-таблицу и вставлять в него чанки испоьзуя table.insert, и уже потом получить из таблицы строку через table.concat.

 

Например так:

local code = {}
...
table.insert(code, data)
...
print(table.concat(code))

=)

Изменено пользователем LeshaInc

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...