LINUX.ORG.RU

Подскажите инструментарий...


0

0

Задача примерно следующая: есть web-сервер, нужно к нему подконнектиться через web-интерфейс, попарсить инфу и отконнектиться. Пароль и логин известны. С помощью чего это вообще можно реализовать?


Ответ на: комментарий от savgur

> Можно подробней

какой вопрос — такой ответ

> допустим gmail.com, надо зайти, скачать адресную книгу, сохранить, выйти.

Проще проверить, нет ли у них специального API. Возможно, через jabber будет проще стянуть контакт-лист в виде ростера.

name_no ★★
()
Ответ на: комментарий от name_no

Все это надо с расчетом на дальнейшую многопоточночть, т.е. надо все это в контексте C++. Я имею ввиду есть-ли либы какие, типа модули web авторизации, и стягивание веб контента? savgur (16.09.2010 16:34:09)

savgur
() автор топика
Ответ на: комментарий от savgur

В баше многопоточность заменяется многопроцессностью. Для авторизации и стягивания контента вам уже предложили wget. Но на gmail скорее всего все построено на явасрипте, так что лучше в первую очередь посмотреть в сторону АПИ. И это вам тоже уже посоветовали.

staseg ★★★★★
()
Ответ на: комментарий от staseg

Т.е. универсального варианта как такового наверно не существует, чтоб на yahoo.com aol, msn, hotmail и т.д., надо использовать их собственные API и их поделки?

savgur
() автор топика
Ответ на: комментарий от savgur

Если интересует только электронная почта, то IMAP почти универсален. В остальном универсальности в общем случае нет: либо использовать API, если оно есть, либо выкачивать wget-ом и разбирать вручную.

staseg ★★★★★
()
Ответ на: комментарий от Artificial_Thought

А как насчет моделирования действий пользователя, это универсальный вариант, тока как это работает и насколько это быстро???

savgur
() автор топика
Ответ на: комментарий от savgur

За советы всем спасибо, у yahoo и google есть api, дальше разберусь. Просто я сначала хотел сделать универсальный вариант через pop3, только yahoo бесплатно pop не дает, вот и пришлось искать другое решение.

savgur
() автор топика

Чего только не делают люди чтобы не учить Erlang/OTP.

anonymous
()

Mechanize/twill, правда у них JS нету (или я не умею их готовить).

AlexKiriukha ★★★★
()
Ответ на: комментарий от savgur

> с расчетом на дальнейшую многопоточночть, т.е. надо все это в контексте C++

Скажите, а многопоточность только в крестах есть?

simple_best_world_web_master
()
Ответ на: комментарий от staseg

> Но на gmail скорее всего все построено на явасрипте, так что лучше в первую очередь посмотреть в сторону АПИ

Для таких сервисов проще всего смотреть на сниффер.

simple_best_world_web_master
()

IMHO, наиболее подходящий...

curl+bash+sed

Chaser_Andrey ★★★★★
()

Кусок коллективного творчества с летнего ICFPC:

;;;
;;; get-and-post.lisp -- conversation with their server.
;;;

(in-package :icfpc)

(defparameter *user*       "...")
(defparameter *pass*       "...")
(defparameter *address*    "http://icfpcontest.org/icfp10/static/j_spring_security_check")
(defparameter *parameters* `(("j_username" . ,*user*) ("j_password" . ,*pass*)))

(defmacro with-cookie ((var address parameters) &body body)
 `(let ((,var (make-instance 'cookie-jar)))
    (http-request ,address
                  :method :post
                  :parameters ,parameters
                  :cookie-jar ,var)
    ,@body))

(defun post-fuel (car-id factory-string)
  (with-cookie (cookie *address* *parameters*)
    (let ((page (substitute #\Space #\Newline
                            (http-request (format nil "http://icfpcontest.org/icfp10/instance/~a/solve" car-id)
                                          :method :post
                                          :parameters `(("contents" . ,factory-string))
                                          :cookie-jar cookie))))
      (if-it (scan-to-strings "already submitted" page)
             :already-submitted
             (nth-value 1 (scan-to-strings "<pre>(.*)</pre>" page))))))

(defun post-car (car-code factory-string)
  (with-cookie (cookie *address* *parameters*)
    (let ((page (substitute
                 #\Space #\Newline
                 (http-request "http://icfpcontest.org/icfp10/instance"
                               :method :post
                               :parameters `(("problem"                  . ,car-code)
                                             ("exampleSolution.contents" . ,factory-string))
                               :cookie-jar cookie))))
      (if-it (scan-to-strings "<pre>(.*parse error.*)</pre>" page)
             (list :parse-error it)
             (if-it (scan-to-strings "instance already exists" page)
                    :car-already-exists
                    (if-it (scan-to-strings "<pre>(.*Ja.*)</pre>" page)
                           (list :car-not-posted-yet it)
                           (scan-to-strings "<pre>(.*)</pre>" page)))))))

(defun get-car-ids ()
  (with-cookie (cookie *address* *parameters*)
    (mapcar #'(lambda (e)
                (parse-integer (scan-to-strings "(\\d+)" e :start 22)))
            (all-matches-as-strings
             "<td style=\"width: 20%;\">(\\d+)</td>"
             (http-request "http://icfpcontest.org/icfp10/score/instanceTeamCount"
                           :cookie-jar cookie)))))

(defun get-car-code (car-id)
  (with-cookie (cookie *address* *parameters*)
    (parse-integer
     (aref
      (nth-value
       1
       (scan-to-strings
        "Car:</label>(\\d+)</div>"
        (http-request (format nil "http://icfpcontest.org/icfp10/instance/~A/solve/form?x=8&y=6" car-id)
                      :cookie-jar cookie)))
      0))))

(defun format-cars (car-codes car-ids file &optional (line-length 66))
  (with-open-file (s file
		     :direction :output
		     :if-exists :supersede
		     :if-does-not-exist :create)
    (dotimes (i (length car-codes))
      (let* ((car (write-to-string (elt car-codes i)))
	     (length (length car)))
	(format s "~%~A~%" (elt car-ids i))
	(dotimes (j (floor length line-length))
	  (format s "~A~%" (subseq car (* line-length j) (* line-length (1+ j)))))
	(format s "~A~%" (subseq car (* line-length (floor length line-length))))))))

quasimoto ★★★★
()

Если понативнее, то можно писать на C + libcurl (как сетевая часть) + libpcre (для парсинга). Но, если случай единичный (качать и парсить не в промышленных масштабах), можно и скрипт на PHP написать (он же будет и коннектиться и встроенными регекспами парсить и в базу, если нужно сохранять).
Так что лучше конкретезируйте масштабы и знание инструментария разработки

nitroxolyne
()
Ответ на: комментарий от nitroxolyne

>Если понативнее, то можно писать на C + libcurl (как сетевая часть) + libpcre (для парсинга). Но, если случай единичный (качать и парсить не в промышленных масштабах), можно и скрипт на PHP написать (он же будет и коннектиться и встроенными регекспами парсить и в базу, если нужно сохранять). Так что лучше конкретезируйте масштабы и знание инструментария разработки

Видимо лучше использовать C + libcurl, т.к. в yahoo contacts api http://developer.yahoo.com/social/contacts/ я ничего не понял, у них там все время обсуждается их uri для всех операций, авторизация oauth и т.д. На сайтах натыкался на реализации, походу на яве, работающие по этим api, но я с явой не знаком, мне бы cpp.

savgur
() автор топика
Ответ на: комментарий от savgur

Так с помощью самой утилы curl можно коннектиться в почту через веб и выкачивать оттуда контент, скажем адрессную книгу?

savgur
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.