Python - Пајтон

Член од
4 февруари 2009
Мислења
7.727
Поени од реакции
7.543
Користам HTTP функции преку Chilkat модулот, направив прости скрипти за логирање на некоја страна, читање на source кодот, но сакам да прашам дали е возможна интеракцијата со Javascript на некоја страна користејќи обични GET и POST requests?

Или ќе ми треба друг модул за тоа?
 

SkyDriver

Would like my bananna ?
Член од
31 јули 2008
Мислења
2.140
Поени од реакции
221
Хмм... друже, не те разбрав баш точно што сакаш да прашаш, незнам во кој правец да го усмерам одговорот, мислиш на нешто поврзано со AJAX или... ?

И кога го спомна Chilkat, една моја сугестија, ако си почетник во Python би ти препорачал да одбегнуваш да користиш фрејмворкови, модули и слично надвор од стандардната библиотека односно најпрвин совладај ја стандардната библиотека, затоа што вака ако заглавиш некаде, нема да знаеш како да се одглавиш после. :)
 
Член од
4 февруари 2009
Мислења
7.727
Поени од реакции
7.543
Сега користам само urllib2 кој е дел од стандардната библиотека.
Но, сеуште имам проблеми при повикување на POST request на одредени форми.
 

SkyDriver

Would like my bananna ?
Член од
31 јули 2008
Мислења
2.140
Поени од реакции
221
„Стандарден“ начин за испраќање на POST Request вака би му дошло:

Код:
from urllib2 import Request, urlopen
from urllib import urlencode

url = "http://www.nekoj_sajt.com/"

# name ти е вредноста на name атрибутот од сорсот на формата
# value ти е вредноста со која сакаш да биде исполнето полето 
data = {"name1" : "value1", "name2" : "value2"}

q = urlencode(data)
req = Request(url, q)
results = urlopen(req).read()
Исто така можеш да ја искористиш и httplib библиотеката:
Код:
import httplib, urllib
params = urllib.urlencode({"spam": 1, "eggs": 2, "bacon": 0})
headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
conn = httplib.HTTPConnection("musi-cal.mojam.com:80")
conn.request("POST", "/cgi-bin/query", params, headers)
response = conn.getresponse()
print response.status, response.reason
data = response.read()
conn.close()
Е сега во ваквите случаи игра улога и самиот сајт, значи треба да знаеш како точно работи самата форма (можеби некаде ќе ти бара колачиња, можеби некаде има hidden текст боксови [spam protection] и слично...) за да можеш да напишеш скрипта конкретно за таа форма.
Ако се разбараш низ нетов ќе најдеш и доста интелигентни автоматизирани ботови кои пред да испратат било каков request најпрвин го анализираат самиот сајт (сорс код) и од добиените резултати од анализата одлучуваат што точно треба да извршат. Незнам дали постои нешто универзално кое би било компитабилно со сите сајтови за испраѓање на POST request. :)

И друга ствар, претпоставувам знаеш дека во Python 3.* имињата на библиотеките се променети, такада за да не пишуваш иста скрипта 2 пати за да биде компитабилна и со 2.* и со 3.* верзијата можеш да ја користиш следнава „техника“:

Код:
import sys
if sys.version[0] == "2":
    # import Python 2.* Libs
else:
    # import Python 3.* Libs

# Ако има разлика и во имињата на класите
# можеш при импортирање да задаваш имиња, пример
# import urllib2 as mojaUrlBiblioteka
# и после: mojaUrlBiblioteka.open(url).read() и слично :)
Значи со горниот код најпрвин ја проверуваш верзијата на Python и потоа ги импортираш соодветните библиотеки. Со ова иста скрипта ќе ти работи и на 2.* и на 3.* верзиите наместо да ја пишуваш истата скрипта 2 пати. :)
 
Член од
4 февруари 2009
Мислења
7.727
Поени од реакции
7.543
Фала за помошта.

Користам 2.7 Питон и стриктно за лична употреба.

Што се работи до urllib2 функциите основните работи ги сфатив, но не знам ни сам како да го анализирам сорс кодот од страницата која ми треба за да најдам повеќе информации затоа што немам искуство.
 
Член од
13 април 2011
Мислења
4
Поени од реакции
1
Фала за помошта.

Користам 2.7 Питон и стриктно за лична употреба.

Што се работи до urllib2 функциите основните работи ги сфатив, но не знам ни сам како да го анализирам сорс кодот од страницата која ми треба за да најдам повеќе информации затоа што немам искуство.
Со тек на време ќе научиш :D
 

shadow_rr

Resistance is Futile
Член од
8 јули 2006
Мислења
1.807
Поени од реакции
323
Има некој работено Django? Ако има таков, ќе ми треба малку помош. :)
Почнав да го разгледувам пред некој ден и сакам да ја разгледам страницата за администрација, па како што пишуваше во книгата, додадов "class Admin: pass" на секој модел чијашто содржина сакам да биде изменувана од администрацијата на сајтот, исто и во settings.py и urls.py ги одкоментирав коментираните линии за администрацијата и кога ќе се логирам на localhost:8000/admin не ми ги прикажува моделите кои ги тагнав претходно.
 

shadow_rr

Resistance is Futile
Член од
8 јули 2006
Мислења
1.807
Поени од реакции
323
Се снајдов. Имало еден куп измени во Django 1.2, а книгата по која се водев била наменета за Django 0.96.
 

SkyDriver

Would like my bananna ?
Член од
31 јули 2008
Мислења
2.140
Поени од реакции
221
Фала за помошта.

Користам 2.7 Питон и стриктно за лична употреба.

Што се работи до urllib2 функциите основните работи ги сфатив, но не знам ни сам како да го анализирам сорс кодот од страницата која ми треба за да најдам повеќе информации затоа што немам искуство.
Малце каснам али сепак да пишам можеби на некој ќе му се најде...
Анализа на било каков код (во случајов од „фамилијата HTML“) има цела хиерархија односно за да можеш да обработиш некаков код најпрво треба да ги знаеш стандардите на истиот код што сакаш да го обработуваш па тек после со користење библиотеки или рачна имплементација да го обработуваш.
Конкретно за HTML разгледај ги HTMLParser (од стандардната библиотека), SGMLParser (исто така од стандардната V2.* библиотека, во V3 овој модул е отстранет) и BeautifulSoup.
Напомена: Со овие модули можеш да обратуваш само HTML и XHTML, а HTML5 неможеш и исто така не е паметно да обработуваш код со Regular Expression затоа што самиот збор ти кажува регуларни изрази, а HTML кодот не е регуларен израз. :)

---

Него темава замрела, малце да ја живнам :)
Често гледам по форумиве прашуваат како да ја одредат локацијата на клиентот по IP адресата, правев нешто за мене па реков да го ипшам и тука.

Значи кодот е во Python, го користи API-то на HostIP и за дадена IP адреса одредува град, држава, кратенка на државата и геолокација, не сум го разгледал детално API-то, ама ако не се лажам информациите за IP адресата се однесуваат на провајдерот кој ја опслужува дадената IP адреса, а не конкретно за клиентот, еве го кодот:

Код:
#!/usr/bin/python
# -*- coding: utf-8 -*-
 
##################################################
#   ip2country Class
#   Only for IPv4 using hostip API - (Python v2.*)
#-------------------------------------------------
#   Copyright:    (c) 2011 by SkyDriver.
#   License:      GNU General Public License (GPL)
#   Feedback:     krstevsky[at]gmail[dot]com
##################################################
 
from xml.dom.minidom import parseString, Element
from urllib2 import build_opener
 
class ip2country(object):
    """Class ip2country"""

    def __init__(self):
        """Object constructor"""
        self.__url = "http://api.hostip.info/?ip="
 
    def __del__(self):
        """Object destructor"""
        del(self.__url)
 
    def __opener(self):
        """Returns HTTP request opener"""
        UserAgent = "ip2country Python bot"
        opener = build_opener()
        opener.addheaders = [('User-agent', UserAgent)]
        return opener
 
    def __get_data(self, dom, tag):
        """Get the value from XML element"""
        v = dom[0].getElementsByTagName(tag)
        if len(v) != 1 or len(v[0].childNodes) != 1:
            return ""
        if not v[0] or v[0].firstChild.nodeType != Element.TEXT_NODE:
            return ""
        return v[0].firstChild.data
 
    def read(self, ip):
        """Get the information for given IP"""
        if not ip:
            raise ValueError("IP address can't be empty!")

        opener = self.__opener()
        xml = opener.open(self.__url + ip).read()
        dom = parseString(xml)
        n = dom.getElementsByTagName("Hostip")

        data = dict({
          "ip" : self.__get_data(n, "ip"),
          "city" : self.__get_data(n, "gml:name"),
          "country" : self.__get_data(n, "countryName"),
          "abbrev" : self.__get_data(n, "countryAbbrev"),
          "coordinates" : self.__get_data(n, "gml:coordinates")
        })

        return data
еве и еден тест пример со IP адресата на Google (74.125.39.147)

>>> ================================ RESTART ================================
>>>
>>> ip = "74.125.39.147"
>>> ip_info = ip2country().read(ip)
>>> for key in ip_info:
print key + ": " + ip_info[key]

ip: 74.125.39.147
abbrev: US
city: Mountain View, CA
coordinates: -122.078,37.402
country: UNITED STATES
>>>
 
Член од
8 април 2012
Мислења
23
Поени од реакции
2
Се извинивувам што започнувам беспотребно нова тема но ми треба мала помош во програмскиот јазик Python.
Мислам дека и некој има познавања C++ ке можеш да ми помогне.
Скоро недела дена тупам мозок и не можам да разберам за што се користи self.
За подобро да ме разберете што сакам да кажам погледнетего видеово
http://www.youtube.com/watch?v=cp1ZeMisTNo
 
M

Mr.InF3ction

Гостин
Не знам за Python но предпоставувам исто е како this покажувач во c++.
Пример ако имаш некоја функција што печати некои променливи од некој објект и таа функција прима објект од тој тип. Е сеа ако си внатре во самиот објект и сакаш да ги печатиш тие променливи од објектот во кој што се наоѓаш, немаш променлива за тој објект за да можеш да ја повикаш таа функција за објектот во кој што се наогаш. И затоа се користи this ...или self...тоа покажува на објектот кај што се наоѓаш...ваљда јасно е..
 
Член од
8 април 2012
Мислења
23
Поени од реакции
2
Не знам за Python но предпоставувам исто е како this покажувач во c++.
Пример ако имаш некоја функција што печати некои променливи од некој објект и таа функција прима објект од тој тип. Е сеа ако си внатре во самиот објект и сакаш да ги печатиш тие променливи од објектот во кој што се наоѓаш, немаш променлива за тој објект за да можеш да ја повикаш таа функција за објектот во кој што се наогаш. И затоа се користи this ...или self...тоа покажува на објектот кај што се наоѓаш...ваљда јасно е..
Не ми се јасно, да продолжиме пп
 
Член од
13 јули 2006
Мислења
7.914
Поени од реакции
7.225
Во PHP self се употребува за статично повикување на објектот и неговите пропертис ако се и тие статик.

Не мора да се креира нов објект.

class Config {
private static $values = array('mysql'=>'localhosr','user'=>'mysqluser','pass'=>'mysql_pass');

public fucntion get($sValue) {
return self::$values[$sValue];
}
}


//nekade vo kondot

echo Config::get('mysql');
 
Член од
13 ноември 2010
Мислења
242
Поени од реакции
57
Се извинивувам што започнувам беспотребно нова тема но ми треба мала помош во програмскиот јазик Python.
Мислам дека и некој има познавања C++ ке можеш да ми помогне.
Скоро недела дена тупам мозок и не можам да разберам за што се користи self.
За подобро да ме разберете што сакам да кажам погледнетего видеово
http://www.youtube.com/watch?v=cp1ZeMisTNo
Мислам дека исто како this. (ако знаеш зошто се повикува this)
 
На врв Bottom