1002 κ° λ§λ€μλ ν리첼 μ¨λ²νΌμ€κΈ° νλ‘μ νΈ. (10μ 20μΌ ~ 29μΌ) κ·Έμ κ΄λ ¨ν νλ‘μ νΈ νκΈ°.
- κ²°κ³Όλ¬Ό : http://dolcom.toher.net/~reset/zb/zboard.php?id=gallery
- μμ€ :
FreechalAlbumSpider (ν μ€νΈλ₯Ό μν΄μ proper.py μμ νμ)
μμ λκΈ° ¶
νλ¦¬μ²Όμ΄ μ λ£νλλ©΄μ μ£Όμ μ¬λλ€μ΄ κ²μνλ€μ ν리첼λ‘λΆν° μ΄μ μ νκΈ° μμνμλ€. μ£Όμ μλ κ΅νμ λ°°λ€μ κ²½μ°λ κ·Έμ€ μμ€λμμ κ²μλ°©μ μ΄μνμλ λΆμ΄ μμ΄μ κ΅νμ¬λλ€ μ μ© μλ²λ₯Ό νλ λ§λ ¨νκ³ κ²μλ°©μμ κ΅΄λ¦¬κΈ°λ‘ νλ€. ν리첼 κ²μν λ³νκΈ°μ κ²½μ° μ΄λ―Έ λ²μ©μ μΈ μ λ‘보λλ μ΄μ§λ³΄λμμ μ 곡μ νμ§λ§, μ¨λ²μ΄λ νμΌ λ°±μ
μ μ§μνμ§ μλλ€. κ·Έλ¦¬κ³ , κ²μν λ°±μ
μ ν λμ ν리첼 κ΄λ¦¬μκ° κΈ°μ‘΄ κ²μνλ€μ μ κ·Ό κΆνμ λλ₯Ό μ‘°μ ν΄μ€μΌ νλ€. λ‘κ·ΈμΈμ²λ¦¬κ° μλμ΄μκΈ° λλ¬ΈμΈλ°, μ λ‘보λ κ²μν λ³νκΈ°λ₯Ό 보λ μΏ ν€ κ΄λ ¨ μ²λ¦¬κ° μμλ€.
λ§μΉ¨ κ°μΈμ μΌλ‘ μμ£Ό μ΄μ©νλ ClientCookie κ° μκΈ° λλ¬Έμ μ½κ² μμ±ν μ μμκ²μ΄λΌ νλ¨, μ΄λμ λ μ€μΌμ€μ μ‘κ³ μμ
μμ.~
νλ‘ν μ½ λΆμ ¶
μ²μ 무μμ ν΄μΌ ν μ§ κ³ λ―Όμ ν΄μΌ νλλ°, μΌλ¨μ 'μ΄λ―Έμ§λ₯Ό κ°μ Έμ€λκ² κ°λ₯νκ°?' λ₯Ό λ¨Όμ νκ² λμλ€. ν리첼μ κ²½μ° μ΄λ―Έμ§λ₯Ό μ»μ΄μ€λ λ°©λ²μ΄ getImage.asp νμΌμ ν΅ν΄μλ§ κ°λ₯νλ€. μΌλ° JPG λ§ν¬κ° μλκΈ° λλ¬Έμ, getImage.asp λ‘ λ겨주λ μΈμλ€μ μμλ΄μΌ νλ€.
1002 λ webdebug μ Proxomitron λκ°λ₯Ό μ΄μ©νλλ°, λ λ€ μΌμ’
μ νλ‘μ μλ²μ²λΌ μ΄μ©νμ¬ HTTP λ‘ μ‘μμ λλ GET/POST, HTTP Header λ°μ΄ν°λ€μ λ‘κ·Έλ₯Ό νμΈν μ μλ€. λμ μ΄μ©, νλ‘ν μ½ λΆμμ νμλ€.
νλ‘κ·Έλλ° ¶
κ΅ν μ¬λμ΄ μ΄μνλ κ²λ°©μμ μμ
; κΈμ°μΈ κ²λ°©μ΄ μ΄λ κ² μ’μμκ°. νμͺ½μ μΈλ―Έλμ€μ κΈ°λ
κ΅ κ΄λ ¨ μμ μ΄ λΉΌκ³‘νκ² μ°¨ μλ κ²μ΄ μΈμμ .
vi - python - ctags - grep μ‘°ν©μ΄ μμ μ°Έ μ λ€μ΄λ§λλ€. λ€λ₯Έ Python μͺ½ μ’μ IDEλ€μ μ λͺ»μ ν΄μ κ·Έλ°μ§ κ°μΈμ μΌλ‘ κ°μ₯ νΈν μ‘°ν©μ΄ λμλ€. ν κ°λ°ν΄λ€λ‘ μμ
ν λ νλ μΌλ€μ μ΄κ²λ€μ μ‘°ν©μΌλ‘ μμμ μΌλ‘ ν μ μκ² λλ€.
μ²μμλ λͺ¨λμ λν΄ Remote Test λ₯Ό λ¨Όμ μ§ννλ€κ°, Local Test λ‘μ μΌλ¨ HTML λ¬Έμλ₯Ό λ°μλκ³ , μ΄λ₯Ό TDD λ‘ νλ©΄μ λ°μ΄ν°λ€μ μΆμΆνλκ²μ΄ λ«κ² λ€ νλ¨, Local Html Test λ₯Ό μμ±ν΄λκ°λ€. μ΄μ ProjectPrometheus μμ νμλ λ°©λ²κ³Ό λΉμ·νμλμ§λΌ, μΌμ¬μ²λ¦¬λ‘ κ±°μ ν루λμ κ΄λ ¨ μμ
λ€μ΄ λλ¬λ€.
μμ
μ κ³μ νλ€ λ³΄λ, κ° λͺ¨λλ€μ λν΄ BottomUp μ€νμΌλ‘ μμ±μ΄ λμλ€. κ·Όλ°, λ§μ 'λ€μμ ν΄μΌ ν μΌμ?' μ§λ¬Έμ ν΄λ³΄λ, μ’ λ©λ©ν΄μ‘λ€. μ΄λμλ μλκ² λ€κ³ νλ¨, μΌλ¨ λ§λ€μ΄λμ κ°κ°μ λͺ¨λλ€μ κ·Όκ±°λ‘ μνμ€ λ€μ΄μ΄κ·Έλ¨μ κ·Έλ¦¬κ³ κ·Έ μμλ₯Ό μ‘μλκ°λ€.
κ° λͺ¨λλ€μ΄ μλ‘ λΆλ¬μ ΈμΌ ν μμλ€μ μ νκ³ λλ€, λ΄κ° λ§λ κ° λͺ¨λλ€μ μΌμ’
μ SpikeSolution μ²λΌ λΌμ΄λΈλ¬λ¦¬ μ°μ΅νλ―μ΄ μ΄μ©ν΄λ³΄μλ€. κ·Έλ¬λ©΄μ μ μ λμ³€λ νλ¦μ λ€μ μ‘μλ€. μ΄λ¬ν μΌλ€μ μμμ μΌλ‘, κ·Έλ¦¬κ³ '무μμ ν κΉ - μ΄κ²μ νμ' λΌκ³ μκ°ν΄λΌ μ μμλ κ²μ΄ κΈ°λΆμ μ°Έ μ’κ² νλ€.
μ΄λ° 3μΌμ λλ TDD λ₯Ό νκ³ νλ°μ PBI μ€νμΌλ‘ ν
μ€νΈ μ½λμ΄ μ§ννλλ°, νλ°μΌλ‘ κ°μλ‘ μμ
μ§μ²λκ° λ¨μ΄μ§κ³ , μ½λμ λν μ΄ν΄λλ λ¨μ΄μ§μ λκΌλ€.
μ£Όλ‘ μ λ‘보λ λ°μ΄ν°λ‘ λ³ννκΈ° μν λ°μ΄ν°λ² μ΄μ€ μ μ₯ λΆλΆμΈλ°, 첫λ²μ§Έ μ΄μ λ‘λ μ λ‘보λ DB μ μ€ν€λ§λ₯Ό μ λλ‘ νμ
νμ§ λͺ»νκ²μ΄ λ¬Έμ μλ€. μ΄ λ¬Έμ λ ν리첼->μ λ‘보λ 컨λ²ν° PHP μμ€λ₯Ό λ³΄κ³ μ΄λ₯Ό Python μΌλ‘ ν¬ν
νμλ€. μ΄μ μ PHP νλ‘κ·Έλλ°μ λ§μ΄ νκΈ° λλ¬Έμ μ΅μνκ³ , μ΄μ°¨νΌ κ°μ μ΄μ‘±κ΅°(?)μ μΈμ΄μ΄λ―λ‘ λ³λ€λ₯Έ μ΄λ €μμ΄ μμλ€. νμ§λ§, ν
μ€νΈ κ²½μ°λ₯Ό λͺ
ννκ² νμ§ μμκΈ° λλ¬Έμ, μλμ΄ μ λλ‘ λμ§ μλμ§μ λν΄μλ κ²μν λ³νλ€ λ§€λ² μΉμμ λμ¨ κ²°κ³Όλ₯Ό νμΈν΄μΌ νλ€.
λνλ λ¬Έμ λ‘λ μ΄μνκ² MySQLdb λͺ¨λμ΄ λ¬Έμ λ₯Ό μΌμΌμΌ°λλ°, update query λ₯Ό λ 릴λ μλ¬λ°μμ νλ κ²μ΄μλ€. λκ°μ 쿼리문μ μμμ μ€ννμλλ μ λμλλ°, MySQLdb μ cursor ν΄λμ€λ₯Ό μ΄μ©, 쿼리λ₯Ό λ 리면 μ€νμ΄ μλλ κ²μ΄μλ€. (DB μ μ μ©μ λλλ°, μλ¬κ° λ°μνλ€.) μ΄ λΆλΆμ λν΄μλ μΌλ¨ try-except λ‘ λμ§μ²λ¦¬λ₯Ό νμ§λ§, 그리 κΈ°λΆμ’μ§ μλ€. μμ μ΄ νμνλ€.
μ§λ¬Έ ¶
μ κ° pythonμ μ ν λͺ°λΌμ κ·Έλ¬λλ°μ, μ΄κ±° μ¬μ©λ²μ’ μλ € μ£Όμκ² μ΄μ.
μλ§ ν΄λ μ λμμ.. freechal μ¨λ²μ©λμ΄ λ무 μ»€μ Έμ μ¨λ²μ μΌλΆλΆμ μ΄μ£Όνλ €κ³ νλλ°, μ΄λ―Έμ§ κ°μ Έμ€λ λΆλΆμ PHPλ‘ νλλ° μ μλμμ..
μ΄κΈμ 보면 λΆνλ립λλ€...
μλ§ ν΄λ μ λμμ.. freechal μ¨λ²μ©λμ΄ λ무 μ»€μ Έμ μ¨λ²μ μΌλΆλΆμ μ΄μ£Όνλ €κ³ νλλ°, μ΄λ―Έμ§ κ°μ Έμ€λ λΆλΆμ PHPλ‘ νλλ° μ μλμμ..
μ΄κΈμ 보면 λΆνλ립λλ€...
λ¦κ²μμΌ λ³΄κ² λμ΄μ..; μ§κΈλ μλμ ν λ°μ§λ μ λͺ¨λ₯΄κ² μ΅λλ€. μλ°λλ¬Έμ λ°λΉ μ μ μ§λ³΄μλ₯Ό λͺ»νλ μ€μΈμ§λΌ.. freechal service UI κ° λ°λλ©΄ κΉ¨μ§λ λ
μμΌκ²μΈμ§λΌ..; μ¬μ©νκΈ°μ μ νμν κ²μΌλ‘ Python 2.2x λ²μ μ λμ MySQLdb λΌμ΄λΈλ¬λ¦¬κ° νμνκ³ μ. ν΄λΉ proper.py νμΌμ λ§μΆ°μ£Όμ λ€, freechalscript.py λ₯Ό μ€νν΄μ£Όμλ©΄ λ©λλ€. κ°μ μν μ νλ νλ‘κ·Έλ¨μ http://www.perlmania.or.kr μμ λ¨Όμ ꡬνλκ±Έλ‘ κΈ°μ΅ν©λλ€. κ±°κΈ°μ ν΄λΉ κ°μ’λ μλκ±Έλ‘ κΈ°μ΅νμ€λ μ°Έμ‘°νμΈμ. --1002
μ°μ κ°μ¬ν©λλ€. κ·Όλ° μλ¬κ° λλ€μ^^; μ κ° νμ¬ μ΄λ―Έμ§ κ°μ Έμ€λ λΆλΆμ μ²λ¦¬λ₯Ό λμ ν λͺ»νκ² λλ°, νΉμ μ΄ λΆλΆμμ μ£Όμνμ¬μΌ ν λΆλΆμ΄ μλμ? pythonλ Header settingκ°μ κ±° νλμ? μ PHPλ‘ νκ³ μκ±°λ μ..
μ리λ 보ν΅μ μ΄λ°λ₯μ νλ‘κ·Έλ¨ (HTTP λ‘ λ¬Έμ κ°μ Έμ€κ³ μ€νΈλ§ νμ±νμ¬ λ°μ΄ν°λ‘ κ°κ³΅νκ³ DBμ μ μ₯) μ΄ λΉμ·ν©λλ€. λ¨, μ¨λ²κ²μνμ κ²½μ° λ‘κ·ΈμΈμ΄ νμνλ°, μ΄ κ²½μ° μΏ ν€ μ²λ¦¬λ₯Ό μν header settingμ ν΄μ€μΌκ² μ£ . Perl κ°μ κ²½μ° LWP, Python μ κ²½μ° ClientCookie, Java μ κ²½μ° HttpUnit(μλμ μ©λλ λ€λ₯΄μ§λ§, μ΄λ° νλ‘κ·Έλ¨μ μν κ°μ΄ λΈλΌμ°μ λΌμ΄λΈλ¬λ¦¬λ‘ μΈ μ μμ΅λλ€.) λ±μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μΈ μ μμ΅λλ€. κ·Έλ¦¬κ³ , μ΄λ―Έμ§μ κ²½μ°λ ν΄λΉ URLμ λ³΄κ³ λ€μ HTTP Connection μ μ΄μ΄μ μ»μ΄μμ binaryλ‘ μ μ₯ν΄μΌ νλ€λ κ²μ΄ μ μμ¬νμ΄ λκ² μ΅λλ€. (HTMLλ§ μ»μ΄μ€λ©΄ img tag μ λ§ν¬λ€λ§ μκ² μ£ .) κ·Έλ¦¬κ³ header setting μμ μ½κ° λ―Έλ¬(?)ν λΆλΆμ΄ μλκ² κ°λλ°, μ λ κ± webdebug λ‘ μΊ‘μ³νκ±° κ·Έλλ‘ λ³΄λΈμ§λΌ..; μ΄ λΆλΆμ CVSμ μ½λ μ°Έμ‘°νμΈμ. --1002
κ°μ¬ν©λλ€. Imageκ°μ Έμ€λ λΆλΆμ΄ κ·Έ λμ μ λμ ν¬κΈ°νκ³ μμλλ°, λλΆμ PHPλ‘ ν΄κ²°νμ΅λλ€.
μ κ° Header settingμ μλͺ»νλκ΅°μ.
