Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Парсинг структуры сайта, используя метаданные svn (https://forum.antichat.xyz/showthread.php?t=146113)

oRb 06.10.2009 12:39

Парсинг структуры сайта, используя метаданные svn
 
Не совсем релиз, ибо кода мало.
Возможно кому-то будет полезен.
Рекурсивно обходит всю директорию, которую вы указали.
Написан на питоне.
PHP код:

#!/usr/bin/python
import sysurllib

def parse
(path):
    
fh urllib.urlopen(url path '.svn/entries')
    
prev ''
    
while True:
        
line fh.readline()
        if 
not line:
            break
        
line line.strip()
        if 
prev:
            if 
line.lower() == 'dir':
                print 
path prev '/'
                
parse(path prev '/')
            
elif line.lower() == 'file':
                print 
path prev
        prev 
line

url 
raw_input("URL: http://")
if 
url[-1] == '/':
    
url url[:-1]
url "http://" url
print 
parse('/'

Пример:
Код:

$ ./svn_parser.py
URL: http://wiki.postgresql.org/skins/

/Simple.php
/chick/
/chick/IE50Fixes.css
/chick/IE60Fixes.css
/chick/main.css
/chick/IE55Fixes.css
/monobook/
/monobook/user.gif
/monobook/Opera6Fixes.css
/monobook/Opera7Fixes.css
/monobook/required.gif
/monobook/audio.png
/monobook/wiki.png
/monobook/rtl.css
/monobook/IE50Fixes.css
/monobook/video.png
/monobook/IE60Fixes.css
[и так далее]


login999 17.04.2010 10:23

Хз зачем, но покрутил сам ))+proxy+вывод в файл
Немного удобнее выводит список файлов, если папка не пуста то буит приблизительно так :
Код:

URL (with scheme):http://wiki.postgresql.org/skins/
========================================
Simple.php
/chick/
      IE50Fixes.css
      IE60Fixes.css
      main.css
      IE55Fixes.css
/monobook/
        user.gif
        Opera6Fixes.css
        Opera7Fixes.css
        required.gif
        audio.png
        wiki.png
        rtl.css
        IE50Fixes.css
        video.png
        IE60Fixes.css
        headbg.jpg
        IE70Fixes.css
        bullet.gif
        file_icon.gif
        IE55Fixes.css
        mail_icon.gif
        document.png
        magnify-clip.png
        IEMacFixes.css
        lock_icon.gif
        wiki-indexed.png
        external.png
        KHTMLFixes.css
        news_icon.png
        link_icon.gif
        main.css
        discussionitem_icon.gif
CologneBlue.php
Skin.sample
/modern/

Код:

#!/usr/bin/python
#-*-encoding:UTF-8-*-
 
import sys
import urllib2

def parse(url, path, write=True):
    try:
        fh = urllib2.urlopen("{url}{path}.svn/entries".format(url=url, path=path))
    except urllib2.HTTPError:
        #print u"Файл не найден : {url}{path}.svn/entries".format(url=url, path=path)
        pass
    else:
        prev = ""
        line = "NOT_EMPTY"
        while True:
            lines = iter(fh.readlines())
            if not line:
                break
            else:
                for line in lines:
                    line = line.strip()
                    if prev:
                        if line.lower() == 'dir':
                            print "{path}{prev}/".format(path=path, prev=prev)
                            if write:
                                out_file.write("{path}{prev}/\n".format(path=path, prev=prev))
                            parse(url, "{1}{0}/".format(prev, path))
                        elif line.lower() == 'file':
                            print "{path}{prev}".format(path=" "*(len(path)-1), prev=prev)
                            if write:
                                out_file.write("{path}{prev}\n".format(path=" "*(len(path)-1), prev=prev))
                    prev = line

url = raw_input("URL (with scheme):")
if url.endswith("/"):
    url = url.rstrip("/")
proxy = raw_input("PROXY? (HTTP/HTTPS, ip:port):").strip()
if proxy:
    proxy_handler = urllib2.ProxyHandler(
                                        {
                                          "http": "http://{0}/".format(proxy),
                                          "https": "http://{0}/".format(proxy)
                                        }
                                      )
    opener = urllib2.build_opener(proxy_handler)
    urllib2.install_opener(opener)
write = raw_input("Write to file?(y/n):").strip()
if write == "y":
    write = True
    out_file = open("work_log.txt", "a")
    out_file.write("{0}\n".format(url))
    out_file.write("{0}\n".format("="*80))
else:
    write = False
print u"="*40
parse(url, "/", write)
out_file.close()



Время: 17:37