svnno****@sourc*****
svnno****@sourc*****
2010年 1月 1日 (金) 17:33:36 JST
Revision: 756 http://sourceforge.jp/projects/p2-php/svn/view?view=rev&revision=756 Author: rsk Date: 2010-01-01 17:33:35 +0900 (Fri, 01 Jan 2010) Log Message: ----------- expack: - å ¬å¼p2ã使ã£ãæ¸ãè¾¼ã¿/datåå¾ã«ãããæ½å¨çãªãã°ãä¿®æ£ã - P2Clientã¯ã©ã¹ã¨ThreadReadã¯ã©ã¹ããªãã¡ã¯ã¿ãªã³ã°ã Modified Paths: -------------- p2ex/trunk/lib/P2Client.php p2ex/trunk/lib/ThreadRead.php -------------- next part -------------- Modified: p2ex/trunk/lib/P2Client.php =================================================================== --- p2ex/trunk/lib/P2Client.php 2009-12-31 18:52:34 UTC (rev 755) +++ p2ex/trunk/lib/P2Client.php 2010-01-01 08:33:35 UTC (rev 756) @@ -40,7 +40,7 @@ const REQUEST_PARAMETER_BBS = 'bbs'; const REQUEST_PARAMETER_KEY = 'key'; const REQUEST_PARAMETER_LS = 'ls'; - const REQUEST_PARAMETER_FROM = 'FROM'; + const REQUEST_PARAMETER_NAME = 'FROM'; const REQUEST_PARAMETER_MAIL = 'mail'; const REQUEST_PARAMETER_MESSAGE = 'MESSAGE'; const REQUEST_PARAMETER_POPUP = 'popup'; @@ -208,13 +208,13 @@ public function readThread($host, $bbs, $key, $ls = '1', &$response = null) { $getData = array( - self::REQUEST_PARAMETER_HOST => (string)$host, - self::REQUEST_PARAMETER_BBS => (string)$bbs, - self::REQUEST_PARAMETER_KEY => (string)$key, - self::REQUEST_PARAMETER_LS => (string)$ls, + self::REQUEST_PARAMETER_HOST => rawurlencode($host), + self::REQUEST_PARAMETER_BBS => rawurlencode($bbs), + self::REQUEST_PARAMETER_KEY => rawurlencode($key), + self::REQUEST_PARAMETER_LS => rawurlencode($ls), ); $uri = self::P2_ROOT_URI . self::SCRIPT_NAME_READ; - $response = $this->httpGet($uri, $getData); + $response = $this->httpGet($uri, $getData, true); $dom = new P2DOM($response['body']); if ($form = $this->getLoginForm($dom)) { @@ -262,24 +262,24 @@ // ³¢êÍdatæ¾ Àª éàÌÆ·éB // datæ¾ ÀªÈ¢êâ^|Ê Ìcª«èÈ¢êÌÍ[ÜéB $dom = new P2DOM($html); - $expression = './/a[contains(@href, "' . self::SCRIPT_NAME_READ . '")' + $expression = './/a[contains(@href, "' . self::SCRIPT_NAME_READ . '?")' . ' and contains(@href, "&moritapodat=")]'; $result = $dom->query($expression); if ($result instanceof DOMNodeList && $result->length > 0) { $anchor = $result->item(0); $uri = self::P2_ROOT_URI - . substr($anchor->getAttribute('href'), self::SCRIPT_NAME_READ); + . strstr($anchor->getAttribute('href'), self::SCRIPT_NAME_READ); $response = $this->httpGet($uri); } // datðæ¾·éB $getData = array( - self::REQUEST_PARAMETER_HOST => (string)$host, - self::REQUEST_PARAMETER_BBS => (string)$bbs, - self::REQUEST_PARAMETER_KEY => (string)$key, + self::REQUEST_PARAMETER_HOST => rawurlencode($host), + self::REQUEST_PARAMETER_BBS => rawurlencode($bbs), + self::REQUEST_PARAMETER_KEY => rawurlencode($key), ); $uri = self::P2_ROOT_URI . self::SCRIPT_NAME_DAT; - $response = $this->httpGet($uri, $getData); + $response = $this->httpGet($uri, $getData, true); if (strpos($response['body'], self::NEEDLE_DAT_NO_DAT) !== false) { return null; @@ -297,7 +297,7 @@ * @param string $host * @param string $bbs * @param string $key - * @param string $from + * @param string $name * @param string $mail * @param string $message * @param bool $beRes @@ -305,7 +305,7 @@ * @return bool * @throws P2Exception */ - public function post($host, $bbs, $key, $from, $mail, $message, + public function post($host, $bbs, $key, $name, $mail, $message, $beRes = false, &$response = null) { // csrfIdðæ¾µA©Âö®p2ÌùÇðÅVÌóÔÉ·é½ßAܸ read.php ð@B @@ -317,36 +317,49 @@ } $dom = new P2DOM($html); - if ($form = $this->getPostForm($dom)) { - $uri = self::P2_ROOT_URI . self::SCRIPT_NAME_POST; + $form = $this->getPostForm($dom); + if ($form === null) { + throw new P2Exception('Post form not found.'); + } - $postData = $this->getFormValues($dom, $form); - $postData[self::REQUEST_PARAMETER_POPUP] = '1'; - $postData[self::REQUEST_PARAMETER_FROM] = rawurlencode($from); - $postData[self::REQUEST_PARAMETER_MAIL] = rawurlencode($mail); - $postData[self::REQUEST_PARAMETER_MESSAGE] = rawurlencode($message); - if ($beRes) { - $postData[self::REQUEST_PARAMETER_BERES] = '1'; - } elseif (array_key_exists(self::REQUEST_PARAMETER_BERES, $postData)) { - unset($postData[self::REQUEST_PARAMETER_BERES]); - } + $uri = self::P2_ROOT_URI . self::SCRIPT_NAME_POST; - $response = $this->httpPost($uri, $postData, true); + // CookiemFãÌPOSTÅ̶»¯\hÌ½ß + // URLGR[hÏÝÌlðpӵĨ¢ÄÄãü·éB + $nameEncoded = rawurlencode($name); + $mailEncoded = rawurlencode($mail); + $messageEncoded = rawurlencode($message); - if (preg_match(self::REGEX_POST_COOKIE, $response['body'])) { - $dom = new P2DOM($response['body']); - $expression = './/form[contains(@action, "' . self::SCRIPT_NAME_POST . '")]'; - $result = $dom->query($expression); - if ($result instanceof DOMNodeList && $result->length > 0) { - $postData = $this->getFormValues($dom, $result->item(0)); - $response = $this->httpPost($uri, $postData, true); - } + // POST·éf[^ðpÓB + $postData = $this->getFormValues($dom, $form); + $postData[self::REQUEST_PARAMETER_POPUP] = '1'; + $postData[self::REQUEST_PARAMETER_NAME] = $nameEncoded; + $postData[self::REQUEST_PARAMETER_MAIL] = $mailEncoded; + $postData[self::REQUEST_PARAMETER_MESSAGE] = $messageEncoded; + if ($beRes) { + $postData[self::REQUEST_PARAMETER_BERES] = '1'; + } elseif (array_key_exists(self::REQUEST_PARAMETER_BERES, $postData)) { + unset($postData[self::REQUEST_PARAMETER_BERES]); + } + + // POSTÀsB + $response = $this->httpPost($uri, $postData, true); + + // CookiemFÌêÍÄPOSTB + if (preg_match(self::REGEX_POST_COOKIE, $response['body'])) { + $dom = new P2DOM($response['body']); + $expression = './/form[contains(@action, "' . self::SCRIPT_NAME_POST . '")]'; + $result = $dom->query($expression); + if ($result instanceof DOMNodeList && $result->length > 0) { + $postData = $this->getFormValues($dom, $result->item(0)); + $postData[self::REQUEST_PARAMETER_NAME] = $nameEncoded; + $postData[self::REQUEST_PARAMETER_MAIL] = $mailEncoded; + $postData[self::REQUEST_PARAMETER_MESSAGE] = $messageEncoded; + $response = $this->httpPost($uri, $postData, true); } + } - return (bool)preg_match(self::REGEX_POST_SUCCESS, $response['body']); - } else { - throw new P2Exception('Post form not found.'); - } + return (bool)preg_match(self::REGEX_POST_SUCCESS, $response['body']); } // }}} @@ -448,16 +461,19 @@ * @param P2DOM $dom * @param DOMElement $form * @param array $data + * @param bool $raw * @return array */ protected function getFormValues(P2DOM $dom, DOMElement $form, - array $data = array()) + array $data = array(), $raw = false) { $fields = $dom->query('.//input[@name and @value]', $form); foreach ($fields as $field) { $name = $field->getAttribute('name'); $value = $field->getAttribute('value'); - $value = rawurlencode(mb_convert_encoding($value, 'SJIS-win', 'UTF-8')); + if (!$raw) { + $value = rawurlencode(mb_convert_encoding($value, 'SJIS-win', 'UTF-8')); + } $data[$name] = $value; } Modified: p2ex/trunk/lib/ThreadRead.php =================================================================== --- p2ex/trunk/lib/ThreadRead.php 2009-12-31 18:52:34 UTC (rev 755) +++ p2ex/trunk/lib/ThreadRead.php 2010-01-01 08:33:35 UTC (rev 756) @@ -1290,9 +1290,13 @@ */ public function scanOriginalHosts() { - if (file_exists($this->keydat) && $dat = file_get_contents($this->keydat)) { + if (P2Util::isHost2chs($this->host) && + file_exists($this->keydat) && + ($dat = file_get_contents($this->keydat))) + { $bbs_re = preg_quote($this->bbs, '@'); - if (preg_match_all("@/(\\w+\\.(?:2ch\\.net|bbspink\\.com))(?:/test/read\\.cgi)?/{$bbs_re}\\b@", $dat, $matches, PREG_PATTERN_ORDER)) { + $pattern = "@/(\\w+\\.(?:2ch\\.net|bbspink\\.com))(?:/test/read\\.cgi)?/{$bbs_re}\\b@"; + if (preg_match_all($pattern, $dat, $matches, PREG_PATTERN_ORDER)) { $hosts = array_unique($matches[1]); $arKey = array_search($this->host, $hosts); if ($arKey !== false && array_key_exists($arKey, $hosts)) {