2018年11月25日 星期日

用Python實作UDP通訊程式


接收端程式
import socket

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)

PORT = 1060

s.bind(('192.168.1.8', PORT))
print('Listening for broadcast at ', s.getsockname())

while True:
    data, address = s.recvfrom(65535)
    print('Server received from {}:{}'.format(address, data.decode('utf-8')))

傳送端程式:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
PORT = 1060
network = '192.168.1.8'
s.sendto('Client broadcast message!456'.encode('utf-8'), (network, PORT))

為了方便進行單機測式,我們使用cmd應用程式,開啟後先執行命令 

1. cd C:\Users\user\AppData\Local\Programs\Python\Python37
2. 輸入Python
3.再把接收端程式輸入在cmd應用程式端
4.然後再Python工具中執行傳送端的應用程式



在Unity時間到即切換到下一個場景

我們延續一篇文章,多加上一個場景(Sense),命名為"2",在新的場景中隨便放一個物件。記得在Scenes In Build中加入"2"的場景。
其程式如下:
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class NewBehaviourScript : MonoBehaviour {
    private float startTime;
    private float alpha = 1.0f;
    [SerializeField]
    private int m_time = 8;
    [SerializeField]
    private CanvasGroup m_canvasGroup;
// Use this for initialization
void Start () {
startTime = Time.time;
      }

// Update is called once per frame
    void FixedUpdate()
    {
        if (Time.time - startTime > m_time)
        {
            if (alpha > 0)
            {
                alpha -= 0.01f;
                m_canvasGroup.alpha = alpha;
            }
            else
            {
                SceneManager.LoadScene("2", LoadSceneMode.Single);
            }
           
        }
}
}

在 Unity UI中加入具有漸層效果的圖片介面

1. 先在Assets目錄,按右鍵選擇New Import Asset,匯入新的影像。
2. 影像不能直接用在人機介面(UI)上,必須先轉成Sprite (2D and UI)才能使用,如下圖。
3.接下來我們新增一個Canvas物件,並在Canvas物件下分別產生 5個Image物件,在Image物件中,放入在步驟2做的一個Sprite。
4.撰寫程式
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class NewBehaviourScript : MonoBehaviour {
    private float startTime;
    private float alpha = 1.0f;
    [SerializeField]
    private int m_time = 8;
    [SerializeField]
    private CanvasGroup m_canvasGroup;
// Use this for initialization
void Start () {
startTime = Time.time;
      }

// Update is called once per frame
    void FixedUpdate()
    {
        if (Time.time - startTime > m_time)
        {
            if (alpha > 0)
            {
                alpha -= 0.01f;
                m_canvasGroup.alpha = alpha;
            }
        }
    }
}

2018年11月23日 星期五

用Python來查看南開科技大學校級研究中心-福祉科技與服務管理研究暨發展中心粉絲頁的資訊

臉書是現代人溝通的重要工具之一,透過臉書來分享自己當天參與活動或心情,大家不用碰面也能透過臉書瞭解好友的動態,粉絲頁則用來協助企業、品牌、或公眾人物分享動態資訊,方便和用戶溝通。

網址:https://www.facebook.com/gtsmrc.nkut是南開科技大學校級研究中心-福祉科技與服務管理研究暨發展中心的粉絲頁。




為了便於撰寫程式來存取臉書上的資訊以及兼顧到資訊安全,臉書開發Facebook Graph API,來協助開發者取得權仗。



按下上圖的"取得權仗",再按下粉絲頁存取權仗


把粉絲頁上網址:https://www.facebook.com/gtsmrc.nkut
後面的gtsmrc.nkut貼到Facebook Graph API上,如下圖



按下"提交"鈕,就可以發現南開科技大學校級研究中心-福祉科技與服務管理研究暨發展中心的粉絲頁的資訊。

import facebook
token = '請從Facebook Graph API取得權
fanpage_info = graph.get_object('gtsmrc.nkut', field = 'id') 
print(fanpage_info)  
print("Fanpage id = ", fanpage_info['id'])
# Get the message from a post.
post = graph.get_object(id='907568272765693_974099289445924', fields='message')
print(post['message'])

post_ids = ["907568272765693_955249167997603","907568272765693_948992145289972"]


for post_id in post_ids:
    post = graph.get_object(id=post_id, fields='message')
    print(post['message'])


執行結果:

2018年11月15日 星期四

用Python來爬圖,找出南開校園美景圖

經由前面幾篇文章,我們可以看到Python的在網路上爬文以及製作WORD文件的技術,今天我們就來看看爬圖的技術。在南開官網中有許多學校校園美景圖。


接下來我們就來討論如何下載這個網址上的圖片。



首先我們先測試下列程式


import requests
url='http://www.nkut.edu.tw/page2/photo.php?CID=1&Album_ID=2&ano='
r=requests.get(url)
print(r)

執行結果是:



表示網站存取成功
import requests
url='http://www.nkut.edu.tw/page2/photo.php?CID=1&Album_ID=2&ano='
r=requests.get(url)
print(r.text)

我在r物件中加上.text,就可以讀取HTML文章,其結果如下:



結果發現有一些亂碼,我們只要在程式中加入一行指令

import requests
url='http://www.nkut.edu.tw/page2/photo.php?CID=1&Album_ID=2&ano='
r=requests.get(url)
r.encoding=r.apparent_encoding
print(r.text)

執行結果如下:



利用BeautifulSoup中的find_all指令找出網頁中的含圖片的標籤,其程式如下:
import requests
from bs4 import BeautifulSoup

url='http://www.nkut.edu.tw/page2/photo.php?CID=1&Album_ID=2&ano='
r=requests.get(url)
r.encoding=r.apparent_encoding
soup =BeautifulSoup(r.text,'html.parser')
all_img=soup.find_all('img')
print(all_img)

執行結果




利用os來進行開檔、存檔等動作,其完整的程式如下:

import requests
from bs4 import BeautifulSoup
import os

url='http://www.nkut.edu.tw/page2/photo.php?CID=1&Album_ID=2&ano='
r=requests.get(url)
r.encoding=r.apparent_encoding
soup =BeautifulSoup(r.text,'html.parser')
all_img=soup.find_all('img')
for img in all_img:
   src=img['src']
   img_url='http://www.nkut.edu.tw/'+src
   print (img_url)
   root='C:/nkut_pic/'
   path = root + img_url.split('/')[-1]
   try:                             
      if not os.path.exists(root):
          os.mkdir(root)
      if not os.path.exists(path):
          r = requests.get(img_url)
          with open(path, 'wb') as f:
              f.write(r.content)
              f.close()
              print("文件保存成功")
      else:
               print("文件已存在")
   except:
           print("爬取失敗")

執行結果

http://www.nkut.edu.tw//files/adbannerplay/4_5643b90c.jpg
文件保存成功
http://www.nkut.edu.tw//files/adbannerplay/5_29d7fb68.jpg
文件保存成功
http://www.nkut.edu.tw//files/adbannerplay/6_28f3edec.jpg
文件保存成功
http://www.nkut.edu.tw//files/adbannerplay/7_8655f891.jpg

文件保存成功