myAdBanner

2014年2月20日 星期四

facebook API 取得項目

if( $userId == 0 ) {
      // Generate a login url
      $url = $facebook->getLoginUrl( array( 'scope' => 'email, user_status' ) );
      ... Your Login button ...
} else {
      // Get user's info
      $userdata = $facebook->api( '/me' );
      $data = array(
            'first_name'    => $userdata['first_name'],
            'last_name'     => $userdata['last_name'],
            'username'      => $userdata['username'],
            'email'         => $userdata['email'],
            'languages'     => $userdata['languages'],
            'locale'        => $userdata['locale'],
            'timezone'      => $userdata['timezone'],
            'gender'        => $userdata['gender'],
            'location'      => $userdata['location'],
            'hometown'      => $userdata['hometown'],
      );
      print_r( $data );
}

2014年1月8日 星期三

獲取遠端圖片並把它保存到本地

<?php 
// Function: 獲取遠端圖片並把它保存到本地 
// $url 是遠端圖片的完整URL位址,不能為空。 
// $filename 是可選變數: 如果為空,本地檔案名將基於時間和日期自動生成. 
function GrabImage($url,$filename="") {  
    if($url==""){ 
        return false; 
    } 
    if($filename=="") {  
        $ext=strrchr($url,".");  
        $temext = strrchr(strtolower($url),".");  
        if($temext!=".jpg"&$temext!=".jpeg"){ 
            return false; 
        } 
        $filename=date("dMYHis").$ext; 
        $filepath=dirname(__FILE__)."/pictures/".$filename;  
    }  
   
    ob_start();  
    readfile($url);  
    $img = ob_get_contents();  
    ob_end_clean();  
    $size = strlen($img);  
   
    $fp2=fopen($filepath, "a");  
    fwrite($fp2,$img);  
    fclose($fp2);  
   
    return $filename;  
}  
?> 

2014年1月7日 星期二

php使用gmail smtp 寄信

<?php
   include("PHPMailer/class.phpmailer.php"); //匯入PHPMailer類別     
  
   $mail= new PHPMailer();          //建立新物件
   $mail->IsSMTP();                 //設定使用SMTP方式寄信
   $mail->SMTPAuth = true;          //設定SMTP需要驗證
   $mail->SMTPSecure = "ssl";       // Gmail的SMTP主機需要使用SSL連線
   $mail->Host = "smtp.gmail.com";  //Gamil的SMTP主機
   $mail->Port = 465;               //Gamil的SMTP主機的SMTP埠位為465埠。
   $mail->CharSet = "big5";         //設定郵件編碼      
  
   $mail->Username = "*********";  //Gmail帳號
   $mail->Password = "*********";  //Gmail密碼      
  
   $mail->From = "xxx@gmail.com"; //設定寄件者信箱
   $mail->FromName = "xxx";                 //設定寄件者姓名
   $mail->Subject = "PHPMailer 測試信件";    //設定郵件標題
   $mail->Body = "大家好,這是一封測試信件! ";  //設定郵件內容
   $mail->IsHTML(true);                     //設定郵件內容為HTML
   $mail->AltBody = $altbody;               //這個設定主要是預防收件者無法顯示HTML信件時的替代文字
   $mail->WordWrap = 50;                    //設定一行最多為50個字元,即每50個字自動斷行
   $mail->AddReplyTo("info@iii.org.tw", "Info"); //設定回函
   $mail->AddBCC("zzz@iii.org.tw", "zzz"); //使用密件副本
   $mail->AddAttachment("/var/tmp/file.tar.gz"); //新增附件檔案
   $mail->AddAttachment("/tmp/image.jpg", "new.jpg"); //附件也可以更改名稱
   $mail->AddAddress("xxxxx@gmail.com", "xxx"); //設定第一位收件者郵件及名稱
   $mail->AddAddress("xxxxx@gmail.com", "xxx"); //設定第二位收件者郵件及名稱      
  
   if(!$mail->Send()) {
       echo "Mailer Error: " . $mail->ErrorInfo;
   }
   else {
       echo "Message sent!";
   }
?>
*注意事項 php.ini 中設定ssl 要開 否則會錯誤 設定方式 搜尋"php_openssl.dll",然後將前方的";"拿掉,若搜尋不到就自己把"extension=php_openssl.dll"這一句加上去,然後存檔重開web server

抓取RSS分析

抓取網頁函數
private string GetWebresourceFile(string url)
{
    WebRequest request = WebRequest.Create(url);
    request.Timeout = 10000;
    WebResponse response = request.GetResponse();
    Stream resStream = response.GetResponseStream();
    StreamReader sr = new StreamReader(resStream, System.Text.Encoding.UTF8);
    string SourceCode = sr.ReadToEnd();
    resStream.Close();
    sr.Close();
    return SourceCode;
} 

2013年12月25日 星期三

file download

<?php
function dl_file($file){

   //First, see if the file exists
   if (!is_file($file)) { die("404 File not found!"); }

   //Gather relevent info about file
   $len = filesize($file);
   $filename = basename($file);
   $file_extension = strtolower(substr(strrchr($filename,"."),1));

   //This will set the Content-Type to the appropriate setting for the file
  switch( $file_extension ) {
     case "pdf": $ctype="application/pdf"; break;
     case "exe": $ctype="application/octet-stream"; break;
     case "zip": $ctype="application/zip"; break;
     case "doc": $ctype="application/msword"; break;
     case "xls": $ctype="application/vnd.ms-excel"; break;
     case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
     case "gif": $ctype="image/gif"; break;
     case "png": $ctype="image/png"; break;
     case "jpeg":
     case "jpg": $ctype="image/jpg"; break;
     case "mp3": $ctype="audio/mpeg"; break;
     case "wav": $ctype="audio/x-wav"; break;
     case "mpeg":
     case "mpg":
     case "mpe": $ctype="video/mpeg"; break;
     case "mov": $ctype="video/quicktime"; break;
     case "avi": $ctype="video/x-msvideo"; break;

     //The following are for extensions that shouldn't be downloaded (sensitive stuff, like php files)
     case "php":
     case "htm":
     case "html":
     case "txt": die("Cannot be used for ". $file_extension ." files!"); break;

     default: $ctype="application/force-download";
   }

   //Begin writing headers
   header("Pragma: public");
   header("Expires: 0");
   header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
   header("Cache-Control: public"); 
   header("Content-Description: File Transfer");
   
   //Use the switch-generated Content-Type
   header("Content-Type: $ctype");

   //Force the download
   $header="Content-Disposition: attachment; filename=".$filename.";";
   header($header );
   header("Content-Transfer-Encoding: binary");
   header("Content-Length: ".$len);
   @readfile($file);
   exit;
}
?>

2013年11月20日 星期三

Removes CDDATA tags from a string

  <?

/***********************************************************************
strip_cdata_tags($string)                                               
-------------------------------------------------------------   
DESCRIPTION:               
  Removes CDDATA tags from a string                               
                                                                        
INPUT:                    
  $string                                                         
            Text containing CDDATA tags                                 
RETURNS:                
  Returns a string free of CDDATA tags                            
***********************************************************************/
function strip_cdata_tags($string)
    {
    # Strip XML CDATA characters from all array elements
    $string = str_replace("", "", $string);
    return $string;
    }  
?>

2013年11月7日 星期四

獲得當前網頁中的所有鏈結

當在一個文本框中輸入網址單擊按鈕後,把當前這個網頁的所有鏈結保存到文本框中顯示出來!
private void btnScrape_Click(object sender, EventArgs e)
{
    string strHttpSource;
 
    if (UrlIsValid())
    {
        // 取得一個包含網頁的程式源代碼的字串。請進一步查看 GetHttpStream()
        // 與 ConvertStreamToString() 這兩個自訂函式。
        try
        {
            strHttpSource = ConvertStreamToString(GetHttpStream(txtURL.Text));
        }
        catch (Exception exp)
        {
            // 將文字設定成 exp.Message 以便顯示於被調用的函數中所設定的自定義錯誤資訊。
            MessageBox.Show(exp.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            return;
        }
 
        string strRegExPattern;
 
        // 將用戶所輸入的網址(URL)賦給一個變數。
        strUrlEntered = txtURL.Text.Trim();
 
        // 取得功能變數名稱以便於不同的地方使用之。最好是在 Click 事件處理函數中
        // 設定此值,如此一來,顯示於 ListView 控制項當中的專案會固定與正確
        // 的網功能變數名稱稱相關聯。如果此值是在其他地方賦值,用戶將能夠更改域
        // 名並且接著在 ListView 當中雙擊某個專案,此舉將會導致該項目
        // 所提取者是一個無效的 URL。
        string[] astrDomain = Regex.Split(strUrlEntered, "/");
 
        // 陣列中的第一個元素[0] 是 "http:" ,第三個元素則是實際的功能變數名稱。
        strDomain = astrDomain[0] + "//" + astrDomain[2];
 
        if (optLinks.Checked)
        {
            ShowStatusIndicators("正在鏈結到網頁以便擷取出鏈結,請稍待。");
 
            lvwLinks.Items.Clear();
 
            // 此處所使用的規則運算式用來剖析一個 HTML anchor
            // (例如: Microsoft ),
            // 說明如下:
            //
            //   ]+    任何字元的一或多個比對,除了位於中刮號中者以外。
            //   )           定義一個子字串之群組的結尾處。
            //   ""?         零或多個引號(逸出)。
            //   >           于 HTML anchor 中緊接著完全相同的文字。
            //   (.+)        比對任何字元的一個群組:也就是 anchor 文字。
            //           與 HTML anchor 之結尾標記完全相同的文字。
            //
            // 請注意:如果您要在 RegEx 測試器中試驗這些規則
            // 運算式模式,請確定您沒有逸出雙引號。
            strRegExPattern = @"]+)""?>(.+)";
        }
        else
        {
            ShowStatusIndicators("正在鏈結到網頁以便擷取出圖像,請稍待。");
 
            htImages = new Hashtable();
            lvwImages.Items.Clear();
 
            // 此處用來取出圖片標記的規則運算式,在觀念上與用來取出 HTML anchor
            // 的規則運算式非常類似。然而,此處的規則運算式卻是複雜許多,
            // 原因是我們必須擷取出可能會依任何順序出現的四個不同屬性。
            //
            // 為了讓此處所使用的規則運算式在長度與複雜度上都保有其合理性,
            // 我們對所要處理之網頁上的 HTML  標記做了下列假設:
            //
            //   1. 用來指定圖片來源的 src 屬性一定會出現。它是唯一的必要屬性。
            //    
            //   2. src 屬性會出現在 width 與 height 屬性之前。如果並非如此的話,
            //      width 與 height 屬性將不會被擷取。
            //
            //   3. 用來指定圖片替代文字的 alt 屬性會出現在 width 與 height 屬性之後。
            //      如果並非如此的話,alt 屬性將不會被擷取。
            //
            //   4. width 與 height 屬性可能會在 src 屬性之後以任何順序出現,
            //      本規則運算式能夠處理此狀況。
            //
            // 上述假設可以確保網頁上的所有圖片標記都會被擷取。然而,它也意味著,
            // 其他某些屬性可能不會出現。
            //
            // 以下是使用於本規則運算式中的幾個重要模式專案:
            //
            //   [^>]+       與 > 以外的任何字元比對。此顯示出您可以移至下一個您所感興趣的屬性。
            //             
            //   (?:         從一個非擷取的群組開始。它會與一個結束 )? 合用, 以便建立
            //               出一個選擇性群組(零或一個比對)。此顯示出您可以讓 src
            //               以外的所有屬性成為可選擇性的。
            //
            //   |           與 width 和 height 使用來成為一個 Or 運算式。
            //               請注意在第一個配對中,width 在前而 height 在後,而在第二個
            //               配對中,則是 height 在前而 width 在後。
            strRegExPattern = @"]+(src)\s*=\s*""?([^ "">]+)""?(?:[^>]+(width|height)\s*=\s*""?([^ "">]+)""?\s+(height|width)\s*=\s*""?([^ "">]+)""?)?(?:[^>]+(alt)\s*=\s*""?([^"">]+)""?)?";
        }
 
        Regex re = new Regex(strRegExPattern, RegexOptions.IgnoreCase);
        Match m = re.Match(strHttpSource);
 
        // 處理 HTML 程式源代碼。因為源是一個長字串,
        // 因此我們不使用 Matches 方法,而改用較有效率的 Match(),Match()
        // 一次只會傳回一個比對。Success 屬性能夠判斷是否存在另外一個比對。
        // NextMatch() 則能夠反復此項作業。
        while (m.Success)
        {
            if (optImages.Checked)
            {
                string strWidth, strHeight;
 
                // 因為規則運算式模式賦予 width 與 height 屬性選擇性的順序,
                // 因此必須先確認哪一個屬性是擺在前面,然後指派合適的 Group 專案值。
                if (m.Groups[3].Value.ToLower() == "width")
                {
                    strWidth = m.Groups[4].Value;
                    strHeight = m.Groups[6].Value;
                }
                else // height 屬性先出現
                {
                    strWidth = m.Groups[6].Value;
                    strHeight = m.Groups[4].Value;
                }
 
                // 調用 AddImage 以便將自定義的 ImageAttributes 物件新增
                // 至 Hashtable 中。請參閱 AddImages 的注釋來瞭解為什麼
                // 要使用一個 Hashtable。
                AddImage(new ImageAttributes(m.Groups[2].Value,
                    m.Groups[8].Value, strHeight, strWidth));
            }
            else
            {
                // 建立一個 ListViewItem 物件並設定第一欄("src")的文字。
                ListViewItem lvi = new ListViewItem();
                lvi.Text = m.Groups[1].Value;
                lvwLinks.Items.Add(lvi);
            }
 
            // 繼續迴圈至下一個比對。
            m = m.NextMatch();
        }
 
        HideStatusIndicators();
 
        // 將所擷取的每一個影像資訊填入清單檢視控制項中。
        if (optImages.Checked)
        {
            if (htImages != null)
            {
                FillImagesListView();
            }
            else
            {
                MessageBox.Show("沒有任何圖像的屬性與正則運算式相符。", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
        else
        {
            if (lvwLinks.Items.Count == 0)
            {
                MessageBox.Show("沒有任何鏈結的 URL 與正則運算式相符。", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
    }
}
 
// 此函式會檢查使用者所輸入的網址是否以 http:// 開頭。
private bool UrlIsValid()
{
    if (txtURL.Text.Substring(0, 7) != "http://")
    {
        MessageBox.Show("您所輸入的網址必須以 http:// 開頭。");
        return false;
    }
 
    return true;
}
 
 
 
// 此函式會讀取 HttpWebResponse 物件所傳回的 HTTP 響應資料流程並將它轉換成一個字串以便交給 RegEx 處理之。
private string ConvertStreamToString(Stream stmSource)
{
    if (stmSource != null)
    {
        try
        {
            using (StreamReader sr = new StreamReader(stmSource))
            {
                // 讀取資料流程並傳回其整個內容。
                return sr.ReadToEnd();
            }
        }
        catch (Exception)
        {
            // 不要顯示一個訊息方塊。只需轉寄來自 GetHttpStream() 的自訂錯誤訊息。
            throw new Exception();
        }
        finally
        {
            // 清除 Stream 與 StreamReader。
            wresScrape.Close();
        }
    }
    else
    {
        return "";
    }
}
 
 
 
 
// 此函式使用衍生自 System.Net.WebRequest 的 .NET 類別來取得一個 HTTP 響應資料流程,
// 此 HTTP 回應資料流會成為 RegEx 的剖析來源或是所要顯示的影像(當
// 被 ImageViewer.Show() 呼叫時)。
public Stream GetHttpStream(string url)
{
    // 使用 WebRequestFactory 建立要求。
    wreqScrape = (HttpWebRequest)(WebRequest.Create(url));
 
    wreqScrape.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.1)";
    wreqScrape.Method = "GET";
    wreqScrape.Timeout = 10000;
 
    try
    {
        // 傳迴響應資料流程。
        wresScrape = (HttpWebResponse)(wreqScrape.GetResponse());
        return wresScrape.GetResponseStream();
    }
    catch (Exception)
    {
        // 最可能導致發生錯誤的原因是輸入了錯誤的 URL 或是並未連結至 Internet。
        // 建立一個自訂的錯誤訊息來轉回給呼叫者函式。
        throw new Exception("在提取您所要求的網頁時發生錯誤。" +
            "請檢查您所輸入的 URL 以及 Internet 聯機,並再次嘗試。");
    }
}