ASP采集-ASP采集程序原理

采集程序的主要步骤如下:

一、获取被采集的页面的内容
二、从获取代码中提取所有用的数据
一、获取被采集的页面的内容
我目前所掌握的ASP常用获取被采集的页面的内容方法:
1、用serverXMLHTTP组件获取数据

以下内容为程序代码:

以下为引用的内容:
Function GetBody(weburl) 
    '创建对象
    Dim ObjXMLHTTP
    Set ObjXMLHTTP=Server.CreateObject("MSXML2.serverXMLHTTP")
    '请求文件,以异步形式
    ObjXMLHTTP.Open "GET",weburl,False
    ObjXMLHTTP.send
    While ObjXMLHTTP.readyState <> 4
        ObjXMLHTTP.waitForResponse 1000
    Wend
    '得到结果
     GetBody=ObjXMLHTTP.responseBody
    '释放对象
     Set ObjXMLHTTP=Nothing
End Function 

调用方法:
GetBody(文件的URLf地址)
2、或XMLHTTP组件获取数据

以下内容为程序代码:

以下为引用的内容:

Function GetBody(weburl)  
    '创建对象
    Set Retrieval = CreateObject("Microsoft.XMLHTTP")
    With Retrieval
     .Open "Get", weburl, False, "", ""
     .Send
     GetBody = .ResponseBody
     End With
    '释放对象
    Set Retrieval = Nothing
End Function
 

调用方法:
GetBody(文件的URLf地址)
这样获取的数据内容还需要进行编码转换才可以使用

以下内容为程序代码:

以下为引用的内容:
Function BytesToBstr(body,Cset)
        dim objstream
        set objstream = Server.CreateObject("adodb.stream")
        objstream.Type = 1
        objstream.Mode =3
        objstream.Open
        objstream.Write body
        objstream.Position = 0
        objstream.Type = 2
        objstream.Charset = Cset
        BytesToBstr = objstream.ReadText
        objstream.Close
        set objstream = nothing
End Function 

调用方法:BytesToBstr(要转换的数据,编码)'编码常用为GB2312和UTF-8
二、从获取代码中提取所有用的数据
目前我掌握的方法有:
1、用ASP内置的MID函数截取需要的数据

以下内容为程序代码:

Function body(wstr,start,over)
start=Newstring(wstr,start)
'设置需要处理的数据的唯一的开始标记
over=Newstring(wstr,over)
'和start相对应的就是需要处理的数据的唯一的结束标记
body=mid(wstr,start,over-start)
'设置显示页面的范围

End Function
调用方法:body(被采集的页面的内容,开始标记,结束标记)
2、用正则获取需要的数据

以下内容为程序代码:

Function body(wstr,start,over)
Set xiaoqi = New Regexp'设置配置对象
xiaoqi.IgnoreCase = True'忽略大小写
xiaoqi.Global = True'设置为全文搜索
xiaoqi.Pattern =  "”&start&“.+?”&over&“"'正则表达式
Set Matches =xiaoqi.Execute(wstr)'开始执行配置
set  xiaoqi=nothing
body=""
For Each Match in Matches
body=body&Match.Value '循环匹配
Next
End Function
调用方法:body(被采集的页面的内容,开始标记,结束标记)
采集程序祥细思路:
1、取得网站的分页列表页的每页地址
目前绝大部分动帘卷西风态网站的分页地址都有规则,如:
动态页
第一页:index.asp?page=1
第二页:index.asp?page=2
第三页:index.asp?page=3
.....
静态页
第一页:page_1.htm
第二页:page_2.htm
第三页:page_3.htm
.....
取得网站的分页列表页的每页地址,只需要用变量替代每页地址的变化的字符即可如:page_<%="&page&"%>.htm
2、获取被采集网站的分页列表页内容
3、从分页列表代码中提取被采集的内容页面的URL连接地址
绝大部分分页页面里的内容页连接也有固定规则,如:
连接1

连接2

连接3

用以下代码就可以获得一个URL连接集合

以下内容为程序代码:

以下为引用的内容:
Set xiaoqi = New Regexp
xiaoqi.IgnoreCase = True
xiaoqi.Global = True
xiaoqi.Pattern =  ””“.+?”““
Set Matches =xiaoqi.Execute(页面列表内容)
set  xiaoqi=nothing
url=""
For Each Match in Matches
url=url&Match.Value
Next 
4、取得被采集的内容页面内容,根据”提取标记“从被采集的内容页面分别截取要取得的数据

因为是动态生成的页面,大多数内容页面内都有相同的html标记,我们可以根据这些有规则的标记提取需要的各个部分的内容。
如:
每个页面都有网页标题,用我上面写的MID截取函数就可以获得之间的值,也可以用正则表达式来获得。
例:body("","")

Posted in asp编程 | Tagged , | Leave a comment

ASP定时操作页面

 

一、Html页面的定时刷新(Refresh--刷新 )

1,Refresh (刷新) 代码使用说明

   说明:让网页多长时间(秒)刷新自己,或在多长时间后让网页自动链接到其它网页。
   用法:<Meta http-equiv="Refresh" Content="30">
      <Meta http-equiv="Refresh" Content="5; Url=http://www.qqview.com">
   注意:其中的5是指停留5秒钟后自动刷新到URL网址

2,如何定时操作
你可以在同一个页面重复刷新,以达到定时操作的效果。
如:<meta http-equiv="refresh" content="5;URL=http://www.qqview.com/test.asp">

缺点:要在浏览器打开页面,不能关闭。

二、Javascript里面的setTimeout 和 setInterval

1,setTimeout 和 setInterval的区别
  window对象有两个主要的定时方法,分别是setTimeout 和 setInteval 他们的语法基本上相同,但是完成的功能取有区别。

  setTimeout方法是定时程序,也就是在什么时间以后干什么。干完了就拉倒。

  setInterval方法则是表示间隔一定时间反复执行某操作。

  如果用setTimeout实现setInerval的功能,就需要在执行的程序中再定时调用自己才行。如果要清除计数器需要 根据使用的方法不同,调用不同的清除方法:

例如:tttt=setTimeout('hello()',1000);

clearTimeout(tttt);

或者:

tttt=setInterval('hello()',1000);

clearInteval(tttt);

2,如何定时操作
比如要定时打开页面 Test.asp(当然Test.asp可以是读取数据库,生成静态页面......)
<script language="JavaScript" type="text/javascript">
<!--
function hello(){
window.open('Http://www.qqview.com/Test.asp')
}
window.setTimeout(hello(),5000);
//-->
</script>

缺点:要在浏览器打开页面,不能关闭。

三,ASP使用VB写的定时组件

ASP中没有setTimeout这类的定时语句,我们需要利用ASP组件来解决,同样,可以采用VB6来编制,具体操作方法参考
上一编组件的做法,为了挂起线程,我们需要运用WIN32API函数Sleep,同样新建一个Active Dll工程,起名字为Timer,
类名为sleep。
  sleep这个WIN32API函数可以用VB6自带的API文本浏览器中找到它的声明方法
  现在类sleep的程序如下,这个组件程序很简单的,我不多解说了。
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private m_set As Long
Public Property Get setup() As Long
  setup = m_set
End Property
Public Property Let setup(strset As Long)
  m_set = strset
End Property
Public Function Sleeptime()
  Sleep (setup)
End Function
  把它编译一下,就生成timer.dll这个组件dll,如果您不会写VB程序,那么您也可以在下载的文件包里找到timer.dll
这个文件。把它copy到windows目录下,在MS-DOS方式中输入
  c:\windows\regsvr32 timer.dll
  完成组件注册,同样可以使用这个定时组件。
  现在解说刚才按个列子的ASP调用文件。看看这个组件如何使用
*定时器的应用
<html>
<title>定时器的应用(From:Http://www.QQview.com)</title>
<head>
</head>
<body>
<%
‘这个是脚本执行时间,默认为90秒,需要改长一点,不然在90秒后程序会被中断'3600为一小时
Server.ScriptTimeOut=3600
set obj=server.createobject("timer.sleep")
'参数1000为线程挂起一秒钟,可以随意设定
obj.setup=1000
do while true
  
  obj.sleeptime
  '执行定时操作,

  If Not Response.IsClientConnected Then
    set obj=nothing
    session.abandon
  End If

loop

%>

</body>
</html>

优点:在这里只是随便用VB写了一个测试的dll,但是用VB肯定可以在dll里面写一个定时执行的操作。
缺点:感觉VB写的这个dll可能会优点占资源。

 

四,结合电脑的任务计划的定时操作,我个人认为是目前最好的方法。


这个个人感觉是目前实现定时操作的最好方法。
就是先在服务器上写好要定时操作的页面,如Test.asp
然后写一个vbs文件,如下:

Dim IE
Set IE = CreateObject("InternetExplorer.Application")
'运行你的 URL
ie.navigate("http://www.qqview.com/Test.asp")
ie.visible=1
'Clean up...
Set IE = Nothing

1,可以在服务器使用“任务计划”
2,也可以在客户机使用“任务计划”

具体使用“任务计划”的使用,请参考http://www.pclala.com/Pc/Skill/200851912807.Html

优缺点:页面会定时的弹出页面Test.asp,但是会有一个解决方法,就是在Test.asp页面加入定时关闭代码:
<script LANGUAGE="JavaScript">
<!--
setTimeout('window.close();', 500);
// -->
</script>
总结,由于目前部分网页语言的限制,在定时操作上有一定的困难,但是经过我多次的求证,发现第四种方法无疑是效果最好的,最省心的。

Posted in asp编程 | Tagged , | Leave a comment

flash和JavaScript的通信

本文转自http://www.blueidea.com/tech/multimedia/2004/1712.asp

本文讨论了3种基本的Flash/Javascript通信方式:
Javascript 到 Flash的通信----使用Flash播放器的javascript方法
Flash 到 Javascript的通信----使用Flash的fscommand
Flash 到 Flash的通信----------使用本地连接对象或综合上2种技术

并不是所有的浏览器都很重视脚本.为了和Flash播放器通信,浏览器必须有内置的钩子以便Flash播放器可以'监瑞脑消金兽听'.浏览器必须是下列的几种:
Netscape Navigator 3.0-4.7x, 和 Netscape 6.2或更高
(Windows 95/98/NT/2000/XP 或 MacOS; 允许Java和LiveConnect)
Internet Explorer 3.0 或更高
(仅Windows 95/98/NT/2000/XP; 允许ActiveX)

注意:Macintosh上的Internet Explorer和早期版本的Netscape6不支持这种方法.请查看本文的附加信息

Javascript到Flash的通信

这个例子演示了如何使用Flash的method把变量从HTML的input text 发送到该页面中的Flash文件中.HTML input的数据通过Flash的SetVariable方法传送到Flash文件中.

查看示例:示例
下载源文件: javascript_to_flash.zip(17k)

步骤:

Flash中
1.新建一个文件,保存为javascript_to_flash.fla
2.用文字工具在舞台上创建一个文本域
3.选择这个文本域,在属性面板中,从下拉列表中选择动态文本(Dynamic Text),在变量(variable)栏填上"myVar"
注意:最好的习惯是使用Instance,用myVar.text更改myVar的值.为了简单起见和兼容Flash4和Flash5,我们使用的是变量名的形式.
4.保存文件
5.发布HTML文件和SWF文件

Dreamweaver中
下一步的工作转移到Dreamweaver中了,当然也可以是其他的HTML编辑器
1.打开上一步发布的HTML文件
2.插入生成的SWF文件和OBJECT/EMBED标签
(1) Insert>Media>Flash,并选择这个Flash
(2) 切换到代码视图,我们需要修改被选中的<OBJECT>和<EMBED>标签
(3) 在OBJECT标签中,插入id="myFlash"

<object classid="clsid :D 27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/
flash/swflash.cab#version=5,0,0,0"
width=366 height=142 id="myFlash">

注意:如果你是粘贴复制代码的话,确保删除不必要的换行.否则可能会引起错误; id也可以在属性面板里直接输入
(4) 在EMBED标签中,插入name="myFlash"和swLiveConnect="true",确保没有使用id属性!代码应当是这样子的:

<embed src="javascript_to_flash.swf" quality=high width=366 height=142
type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?
P1_Prod_Version=ShockwaveFlash"
name="myFlash" swLiveConnect="true">
</embed>

3.创建表单域
(1) 回到设计视图
(2) 插入文本域(Insert> Form Object> Text Field),如果询问是否添加表单域,选择是
(3) 把文本域的HTML标签修改成这样:

<input type="text" name="sendText" maxlength="45" onChange="doPassVar(this)">
每当文本域内容发生变化时,onChange就被触发,doPassVar()函数就被调用

4.创建传递变量值的Javascript函数
复制下面的Javascript到<head></head>标签内

<SCRIPT LANGUAGE=JavaScript>
<!--
function doPassVar(args){
var sendText = args.value;
   window.document.myFlash.SetVariable("myVar", sendText);
}
//-->
</SCRIPT>

5.保存文件,测试一下(F12)

Flash到Javascript的通信
从HTML可以发送数据到Flash,反过来也可以. 这个例子演示了如何应用Flash的Fscommand来发送数据到Javascript.

查看示例:示例2
下载源文件: flash_to_javascript.zip(10K)

简要步骤:
Flash中
新建一个文件,保存为flash_to_javascript.fla
创建一个文本域,设置成输入文本(Input Text),选择"border"以便我们能看到他,指定他的变量为inputVar
创建一个按钮,在按钮上添加如下的as:

on (release) {
  fscommand ("send_var", inputVar);
}

保存文件,导出HTML和SWF

Dreamweaver中
1.打开导出HTML文件,修改<OBJECT>和<EMBED>标签,结果同上:
<object classid="clsid :D 27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/
flash/swflash.cab#version=5,0,0,0"
width=366 height=142 id="myFlash">

<embed src="javascript_to_flash.swf" quality=high
width=366 height=142
type="application/x-shockwave-flash"

pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?
P1_Prod_Version=ShockwaveFlash" name="myFlash" swLiveConnect="true">
</embed>

 2. 插入如下的Javascript到<Body>标签内:
<SCRIPT LANGUAGE=JavaScript>
<!--
var InternetExplorer = navigator.appName.indexOf("Microsoft") != -1;
function myFlash_DoFSCommand(command, args)                {
  var myFlashObj = InternetExplorer ? myFlash : document.myFlash;
  alert (args);
}

if (navigator.appName && navigator.appName.indexOf("Microsoft") != -1 &&
  navigator.userAgent.indexOf("Windows") != -1 && navigator.userAgent.indexOf("Windows 3.1") == -1) {
  document.write('<SCRIPT LANGUAGE=VBScript\> \n');
  document.write('on error resume next \n');
  document.write('Sub myFlash_FSCommand(ByVal command, ByVal args)\n');
  document.write(' call myFlash_DoFSCommand(command, args)\n');
  document.write('end sub\n');
  document.write('</SCRIPT\> \n');
}
//-->
</SCRIPT>

Flash和Flash的通信
通过上面两种方法的混和使用,同一HTML中两个或者更多的Flash直接可以相互传送消息. 从一个flash使用fscommand传送消息给Javascript,使用Flash的Javascript methods把消息传给另外一个flash

详细的看这里:Flash影片之间的通信示例

从Flash MX开始,local connection对象可以用来在flash之间传送消息. 这使得同一HTML中的或者位于两个浏览器窗口中的两个flash影片可以相互发送消息,而不必使用Javascript或者fscommand
详细的看这里:在Flash MX中使用local connection对象(英文)

本站的localConnection教程:http://www.blueidea.com/tech/multimedia/2003/739.asp

附可控制Flash Player的Javascript方法:
一览表:
Play() ---------------------------------------- 播放动画
StopPlay()------------------------------------停止动画
IsPlaying()----------------------------------- 动画是否正在播放
GotoFrame(frame_number)---------------- 跳转到某帧
TotalFrames()------------------------------- 获取动画总帧数
CurrentFrame()------------------------------回传当前动画所在帧数-1
Rewind()-------------------------------------使动画返回第一帧
SetZoomRect(left,top,right,buttom)-------放大指定区域
Zoom(percent)------------------------------改变动画大小
Pan(x_position,y_position,unit)------------使动画在x,y方向上平移
PercentLoaded()----------------------------返回动画被载入的百分比
LoadMovie(level_number,path)----------- 加载动画
TGotoFrame(movie_clip,frame_number)- movie_clip跳转到指定帧数
TGotoLabel(movie_clip,label_name)------ movie_clip跳转到指定标签
TCurrentFrame(movie_clip)--------------- 回传movie_clip当前帧-1
TCurrentLabel(movie_clip)-----------------回传movie_clip当前标签
TPlay(movie_clip)---------------------------播放movie_clip
TStopPlay(movie_clip)----------------------停止movie_clip的播放
GetVariable(variable_name)-----------------获取变量
SetVariable(variable_name,value)-----------变量赋值
TCallFrame(movie_clip,frame_number)---call指定帧上的action
TCallLabel(movie_clip,label)----------------call指定标签上的action
TGetProperty(movie_clip,property)--------获取movie_clip的指定属性
TSetProperty(movie_clip,property,number)-设置movie_clip的指定属性

Posted in asp编程 | Tagged , , , | Leave a comment

ASP读取mp3信息

一直想做一个基于网络的MP3播放器,而MP3播放器又需要读取MP3信息, 

先简单说一下MP3的ID3 标记,因为主要是操作这个玩意
MP3最开始的时候没有我们今天看到的那样,有歌手、年代,专集等等信息
只有一些简单的参数如yes/no来表示是不是privated或者copyrighted等信息,这样对MP3的相关工作带来了很多不便,1996年的时候有个老外提出来在每个MP3后面追加一段数据,用以存放上述的那些信息,后来就发展成为id3 v1 据我所知的现在已经到1.1了,具体的还是自己去查一下吧
还是老习惯,用metadata来引入DLL,我以前有文章贴过的,不知道的请自己去查
看代码
〈!--METADATA TYPE="typelib"
UUID="00000205-0000-0010-8000-00AA006D2EA4"
NAME="ADODB Type Library"
--〉
〈%
Function ConvertBin(Binary)
'This function converts a binary byte into an ASCII byte.
for i = 1 to LenB(Binary)
strChar = chr(AscB(MidB(Binary,i,1)))
ConvertBin = ConvertBin & strChar
Next
End Function
dim objStream
dim strTag, strSongName, strArtist, strAlbum, strYear, _
strComment, strGenre, strFile
'Specify the folder to iterate through, displaying all the MP3s
Const folder = "C:\mp3s\"
'Grab the folder information
Dim objFSO, objFolder, objFile
Set objFSO = Server.CreateObject("Scripting.FileSYstemObject")
Set objFolder = objFSO.GetFolder(folder)
'Create the Stream object
set objStream = Server.CreateObject("ADODB.Stream")
objStream.Type = adTypeBinary
'Loop through the files in the folder
For Each objFile in objFolder.Files
'Open the stream
objStream.Open
objStream.LoadFromFile objFile.Path
'Read the last 128 bytes
objStream.Position = objStream.size - 128
'Read the ID3 v1 tag info
strTag = ConvertBin(objStream.Read(3))
if ucase(strTag) = "TAG" then
strSongName = ConvertBin(objStream.Read(30))
strArtist = ConvertBin(objStream.Read(30))
strAlbum = ConvertBin(objStream.Read(30))
strYear = ConvertBin(objStream.Read(4))
strComment = ConvertBin(objStream.Read(30))
end if
'Display the results
response.write "〈table〉〈tr〉〈td colspan=2〉〈h3〉" & _
"ID3 Tag info for:〈/td〉〈/tr〉〈tr〉" & _
"〈td colspan=2〉" & objFile.Name & "〈/td〉〈/tr〉"
response.write "〈tr〉〈td〉〈b〉Artist: 〈/b〉〈/td〉" & _
"〈td〉" & strArtist & "〈/td〉〈/tr〉"
response.write "〈tr〉〈td〉〈b〉Track: 〈/b〉〈/td〉" & _
"〈td〉" & strSongName & "〈/td〉〈/tr〉"
response.write "〈tr〉〈td〉〈b〉Album: 〈/b〉〈/td〉" & _
〈td〉" & strAlbum & "〈/td〉〈/tr〉"
response.write "〈tr〉〈td〉〈b〉Year: 〈/b〉〈/td〉" & _
"〈td〉" & strYear & "〈/td〉〈/tr〉"
response.write "〈tr〉〈td〉〈b〉Comment: 〈/b〉" & _
"〈/td〉〈td〉" & strComment & "〈/td〉〈/tr〉"
response.write "〈/table〉"
objStream.Close
Response.Write "〈p〉〈hr〉〈p〉"
Next
Set objStream = Nothing 'Clean up...
%〉
自己试试吧
希望能对你有所帮助

Posted in 67688 | Tagged , | Leave a comment

ASP制作在线音乐服务器

音乐服务器(Music Server)是指一个提供音乐在线服务的服务器,它包括高端提供门户服务的网站、Web数据库和低端的操作平台、硬件设施。目前,在Internet和Intranet上有不少这样的站点,特别是在一些高速宽带的局域网中(如校园网),音乐服务器给上网的朋友提供了休闲娱乐的好去处,同时也给网站带来了较高的访问率。

----像其他站点一样,音乐服务器包括网站和硬件两个部分。硬件性能和服务器效率是成正比的,因而如何构建网站才是一个音乐服务器的关键。从目前来看,网站基本有两种类型:一种是运行在Unix / Linux环境下,采用Perl / C / Php / Java 等作CGI编程语言;一种是运行在Win NT Server 平台上,采用ASP / WinCGI 作后台语言。前者运行效率高,但结构复杂,比较适合大型站点;后者编程难度相对较低,而且采用ODBC驱动接口,数据库连接方便,特别适合作音乐服务器。

----本文将以ASP 5.0为编程环境、Mircosoft Access 97为Web 数据库、Win NT Server 4.0为运行平台,举例说明音乐服务器的构建步骤。

----一个基本的音乐服务器包括音乐在线欣赏、音乐排行榜、音乐主题检索和音乐下载等四个部分。下面将主要从技术角度来讨论如何实现以上功能。

音乐主题数据库的规划

----音乐主题数据库是Web站点存储所需音乐资料的仓库,它的规划在很大程度上影响了整个网站的结构和效率。数据库中可以单独建成一张表单,也可以以主键和外键的形式建成多张表单。本例中为说明上的便利,建成如下单表框架: (music.mdb)

音乐在线欣赏

----在线欣赏是指客户端利用播放器播放服务器端的音乐文件。其原理是当客户端向服务器提交音乐选单后,服务器生成相应的.m3u文件,并将该文件通过Http协议下行至客户端;客户端将被激发调用相应的播放器执行该文件,从而实现了音乐在线欣赏功能。目前支持.m3u文件的播放器有Winamp、Realplayer G2、 Musicmatch等。当这些播放器软件被正确安装在客户端时,就可以自动播放.m3u文件。所以解决问题的关键在于后台如何生成.m3u文件并下行到客户端。以下利用ASP中内置的FileSystem组件给出一种解决方案,并给出相应程序。

<%
dim choose,path,mydb,myset,SQL,fs,mp3
‘##### 获得list.htm表单中选中的歌曲项
对应的id号,并赋给字串变量choose #####
choose=“("
for i=3 to request.form.count
choose=choose+request.form(i)+“,"
next
choose=left(choose,len(choose)-1)+“)"
‘##### 判断choose变量,如果不包含任何id号,
说明list.htm中没有选中任何歌曲,终止程序#####
if choose=“()" then
response.redirect(“list.htm")
response.end
end if
‘#####设置文件路径,需要把temp目录的权限设为
对internet匿名用户具有read & write 权限 #####
path=“E:\inetpub\wwwroot\temp\"
‘##### 创建文件对象 #####
Set fs = CreateObject(“Scripting.FileSystemObject")
Set mp3 = fs.CreateTextFile(path+“listen.m3u", True)
‘##### 创建数据库对象#####
set mydb=server.createobject(“adodb.connection")
mydb.open “music"
‘##### 检索数据库,获得歌曲信息 #####
SQL=“select mp3name,url from "&dbname&
“where id in "&choose
set myset=tdb.execute(SQL)
do while not myset.eof
‘##### 生成点播歌曲文件列表 #####
mp3.Write(“http://"+myset(“url")+chr(10))
myset.movenext
loop
‘##### 更新数据库中的当天点播次数和
总共点播次数 #####
SQL=“update music set click=click+1,
this=this+1 where id in "&choose
mydb.execute(SQL)
‘##### 取消对象 #####
set myset=nothing
mydb.close
set mydb=nothing
mp3.close
set mp3=nothing
‘##### 将该文件下载给用户#####
response.redirect(“listen.m3u")
response.end
%>

----注意:利用这种方法时,要控制.m3u文件Http头的内容。在Winnt中可利用IIS设置.m3u文件类型的Mine内容。具体操作如下:启动IIS —> 选中音乐服务器所在的Web站点 —> 点击“属性” 按钮 —> 在出现的属性选项卡中点击“Http标题”卡 —> 点击“文件类型”按钮 —> 点击“新增类型”按钮 —> 在“相应的扩展名”中填入“.m3u”,在“内容类型”中填入“audio/mpegurl” —> 然后一路确定即可。

Posted in asp编程 | Tagged | Leave a comment

asp&request对象

        首先取得表单中填写的数据,使用ASP的Request对象非常容易可以实现数据的收集。双引号中的就是上一步建立的各个项目的名字(NAME)。所以今后为每个项目起名字是个好习惯,尽管有时候并不一定用得到。这样取得的数据就保存在等号坐侧的变量中了。

If CompanyName = "" Or CName = "" Or City = "" Or Tel = "" Then
'Response.Write "<html><body><center><font size=5>请将资料填写完整。</font></center></body></html>"
Response.Redirect "error.htm"
Response.End
End If

这里是检测各个项目是否输入了东西,如果为空则不往下继续执行,显示错误信息。注意:你可以使用两种方法。我都列出了。方法一:使用Response.Write方法写一个出错页面,类似于java scripts的document.write写法,只是ASP使用Response.write罢了。方法二:使用Response.Redirect方法导向出错页面error.htm。我在方法一的代码前加上单引号表示注释。(ASP中表示注释用单引号')。

set dbconnection=Server.CREATEOBJECT("ADODB.CONNECTION")
DBPath = Server.MapPath("customer.mdb")
dbconnection.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath

(1)建立Connection对象:dbconnection,建立一个连接(Connection)是数据库存取的开始。我们使用ASP的内建对象方法Server.Createobject建立与数据库的连接。ADODB是ASP的数据库存取组件,不必担心只要有ASP就有它了,是内置的。
(2)使用dbconnection.open方法打开数据库customer.mdb。driver参数语法: driver={Microsoft Access Driver (*.mdb)}必须这么写。告诉系统使用ACCESS ODBC驱动处理。dbq参数用来指定打开的数据库文件,它必须是完整的路径。例如"c:inetpubwwwrootcustomercustomer.mdb",我们使用Server.MapPath的方法取得数据库的完整路径。 

Set rs = Server.CreateObject("ADODB.Recordset")

建立Recordset对象rs。Connection仅仅是建立了与数据库间的连接,要存取数据还应该再建立Recordset对象。

rs.Open "客户", dbconnection, adOpenDynamic, 3

打开数据库中的表"客户"(客户是表名)。 语法:

rs.open 数据表名或SQL指令,已经建立的Connection对象(这里是dbconnection), 锁定类型
rs.AddNew
rs("公司名称") = CompanyName
rs("联络人姓名") = CName
rs("所在城市") = City
rs("电话号码") = Tel
rs.Update

用AddNew向数据库请求添加数据。最后用Update写入。注意:等号右侧的变量保存着用Request取得的表单数据。双引号内的就是数据库的字段,应该与数据库的一致啊。否则会出错的。这样变量内的数据就写入了数据库对应的字段内了。

Response.Write "<html><body><center><font size=5>祝贺,您的数据已经添加进数据库了!<p>"
Response.Write "<a href='viewdatabase.asp'>查看数据</a>"
Response.Write "</font></center></body></html>"

写入成功后显示祝贺信息并建立查看数据库记录的连接。

%>
<html>

<head>
<title></title>
</head>

<body>
</body>
</html>

Posted in asp编程 | Tagged , | Leave a comment

asp操作数据库

<一>数据库的连接方法:
  1.Access数据库的DSN-less连接方法:
  set adocon=Server.Createobject("adodb.connection")
  adoconn.Open"Driver={Microsoft Access Driver(*.mdb)};DBQ="& _
  Server.MapPath("数据库所在路径")
  2.Access OLE DB连接方法:
  set adocon=Server.Createobject("adodb.connection")
  adocon.open"Provider=Microsoft.Jet.OLEDB.4.0;"& _
  "Data Source=" & Server.MapPath("数据库所在路径")
  3.SQL server连接方法:
  set adocon=server.createobject("adodb.recordset")
  adocon.Open"Driver={SQL Server};Server=(Local);UID=***;PWD=***;"& _
  "database=数据库名;"
  4.SQL server OLE DB连接方法:
  set adocon=Server.Createobject("adodb.connection")
  adocon.open"provider=SQLOLEDB.1;Data Source=RITANT4;"& _
  "user ID=***;Password=***;"& _
  "inital Catalog=数据库名"
  5.Oracle 连接方法:
  set adocon=Server.Createobject("adodb.connection")
  adocon.open"Driver={microsoft odbc for oracle};server=oraclesever.world;uid=admin;pwd=pass;"
  6.Oracle OLE DB 连接方法:
  set adocon=Server.Createobject("adodb.connection")
  adocon.open"Provider=OraOLEDB.Oracle;data source=dbname;user id=admin;password=pass;"
  7.dBase 连接方法:
  set adocon=Server.Createobject("adodb.connection")
  adocon.open"Driver={microsoft dbase driver(*.dbf)};driverid=277;dbq=------------;"
  8.mySQL 连接方法:
  set adocon=Server.Createobject("adodb.connection")
  adocon.open"Driver={mysql};database=yourdatabase;
  uid=username;pwd=yourpassword;option=16386;"
  9.Visual Foxpro 连接方法:
  set adocon=Server.Createobject("adodb.connection")
  adocon.open"Driver={microsoft Visual Foxpro driver};sourcetype=DBC;sourceDB=*.dbc;Exclusive=No;"
  10.MS text 连接方法:
  set adocon=Server.Createobject("adodb.connection")
  adocon.open"Driver={microsoft text driver(*.txt; *.csv)};dbq=-----;"&_
  "extensions=asc,csv,tab,txt;Persist SecurityInfo=false;"
  11.MS text OLE DB 连接方法:
  set adocon=Server.Createobject("adodb.connection")
  adocon.open"Provider=microsof.jet.oledb.4.0;data source=your_path;"&_
  "Extended Properties'text;FMT=Delimited'"
  <二>常用的四种SQL命令:
  1.查询数据记录(Select)
  语法:Select 字段串行 From table Where 字段=内容
  例子:想从book表中找出作者为"cancer"的所有记录,SQL语句便如下:
  select * from book where author=’cancer’
  "*"是取出book表所有的字段,如查询的字段值为数字,则其后的"内容"便无须加上单引号,如是日期,则在Access中用(#)包括,而在SQL server中则用(’)包括,
  如:
  select * from book where id=1
  select * from book where pub_date=#2002-1-7# (Access)
  select * from book where pub_date=’2002-1-7’ (SQL Server)
  提示:
  日期函数to_date不是标准sql文,不是所有的数据库适用,所以大家在使用的时候要参考数据库具体语法
  另外如果是查询传入的变量,则如下:
  strau=request.form("author")
  strsql="select * from book where author=’"&strau&"’"
  如果查询的是数字,则:
  intID=request.form("id")
  strsql="select * from book where id="&intID
  在很多数据库中,如:oracle,上面的语句是可以写成:
  strsql="select * from book where id='"&intID&"'"
  但是字符型一定不能按照数字格式写,需要注意。
  2.添加记录(Insert)
  语法:
  Insert into table(field1,field2,....) Values (value1,value2,....)
  例子:添加一作者是"cancer"的记录入book表:
  insert into book (bookno,author,bookname) values (’CF001’,’cancer’,’Cancer无组件上传程序’)
  同样,如果用到变量就如下:
  strno=request.form("bookno")
  strau=request.form("author")
  strname=request.form("bookname")
  strsql="insert into book (bookno,author,bookname) values (’"&strno&"’,’"&strau&"’,’"&strname&"’)"
  3.用Recordset对象的Addnew插入数据的方法:
  语法:
  rs.addnew
  rs("field1").value=value1
  rs("field2").value=value2
  ...
  rs.update
  4.修改数据记录(Update)
  语法:
  update table set field1=value1,field2=value2,...where fieldx=valuex
  例子:
  update book set author=’babycrazy’ where bookno=’CF001’
  如果用到变量就如下:
  strno=request.form("bookno")
  strau=request.form("author")
  strsql="update book set author=’"&strau&"’ where bookno=’"&strno"’"
  5.Recordset对象的Update方法:
  语法:
  rs("field1").value=value1
  rs("field2").value=value2
  ...
  rs.update
  注意:使用语法3和语法5的时候,一定要注意字段的类型(尤其是日期型)一致,否则出错的几率非常的高。
  例子:
  strno=request.form("bookno")
  strau=request.form("author")
  set adocon=server.createobject("adodb.connection")
  adocon.open "Driver={Microsoft Access Driver(*.mdb)};DBQ=" & _
  Server.Mappath=("/cancer/cancer.mdb")
  strsql="select * from book where bookno=’"&strno&"’"
  set rs=server.createobject("adodb.recordset")
  rs.open strsql,adconn,1,3
  if not rs.eof then ’如果有此记录的话
  rs("author").value=strau
  rs.update
  end if
  rs.close
  set rs=nothing
  adocon.close
  set adocon=nothing
  6.删除一条记录(Delete)
  语法:
  Delete table where field=value
  例子:删除book表中作者是cancer的记录
  delete book where author=’cancer’

Posted in asp编程 | Tagged , , | Leave a comment

ASP操作sql语句

1,SELECT 语句 

  在SQL的世界里,最最基础的操作就是SELECT 语句了。在数据库工具下直接采用SQL的时候很多人都会熟悉下面的操作:

  SELECT what FROM whichTable WHERE criteria 

  执行以上语句就会创建一个存放其结果的查询。 

  而在ASP页面文件上,你也可以采用以上的一般语法,不过情况稍微不同,ASP编程的时候,ELECT 语句的内容要作为字符串赋给一个变量:

  SQL = "SELECT what FROM whichTable WHERE criteria" 

  好了,明白了ASP下SQL“说话”的方式,接下来如法炮制即可,只要满足你的需要,传统的SQL查询模式和条件查询都能派用场。 

  举例说明,不妨假设你的数据库内有个数据表,名字是Products ,现在你想取出这个表里的全部记录。然后你就编写了下面的代码: 

  SQL ="SELECT * FROM Products" 

  以上代码——SQL语句的作用就是取出表内的全部数据——执行后将会选出数据表内的全部记录。不过,要是只想从表内取出某个特定列,比如p_name。那就不能用 * 通配符了,这里得键入具体某列的名字,代码如下: 

  SQL ="SELECT p_name FROM Products" 

  执行以上查询之后Products 表内、p_name 列的内容就会全被选取出来。

  2,WHERE子句设置查询条件

  举个例子,假如你只打算取出p_name 记录,而且这些记录的名字必须以字母w打头,那么你就要用到下面的WHERE 子句了:

  SQL ="SELECT p_name FROM Products WHERE p_name LIKE 'W%'" 

  WHERE 关键词的后面跟着用来过滤数据的条件,有了这些条件的帮助,只有满足一定标准的数据才会被查询出来。在以上的例子里,查询的结果只会得到名字以w 打头的p_name 记录。 

  以上例子中,百分比符号(%)的含义是指示查询返回所有w 字母打头而且后面是任何数据甚至没有数据的记录条目。所以,在执行以上查询的时候, west 和 willow 就会从Products 表内被选取出来并存放在查询里。 

  就像你看到的那样,只要仔细地设计SELECT 语句,你就可以限制recordset 中返回的信息量,多琢磨琢磨总能满足你的要求。 

  这些啊还不过是掌握SQL用途刚起步。为了帮助你逐步掌握复杂的SELECT 语句用法,下面就让我们再来看一下关键的标准术语:比较运算符,这些玩意都是你在构筑自己的SELECT 字符串来获得特定数据时要经常用到的。 

  WHERE子句基础 

  在开始创建WHERE 子句的时候,最简单的方式是采用标准的比较符号,它们是 < 、 <= 、 > 、 >= 、<> 和 =。显然,你很快就能明白以下代码的含义和具体运行结果:

  SELECT * FROM Products WHERE p_price >= 199.95 
  SELECT * FROM Products WHERE p_price <> 19.95 
  SELECT * FROM Products WHERE p_version = '4' 

  注意: 这里你会注意到,最后一个例句中的数字4周围加了单引号。原因是这样的,在这个例子中的 "4" 是文本类型而非数字类型。

  3,比较运算符:LIKE、NOT LIKE和 BETWEEN 

  比较运算符指定从表内取出数据的内容范围。你可以用它们来创建过滤器以便缩小recordset的范围,促使其只保存给定任务下你关心的信息。 

  你已经在上面取出w打头记录的例子中看到了LIKE的用法。LIKE判定词是一个非常有用的符号。不过,在很多情况下用了它可能会带给你太多的数据,所以在用到它之前最好先开动脑筋多想想自己到底想获得什么数据。假设你想取出5位数字的SKU号码,而且其开头是1结尾是5,那么你可以用下划符(_)代替%符号:

  SQL ="SELECT * FROM Products WHERE p_sku LIKE '1___5'" 

  下划符表示任意一个字符。所以在输入“1___5”的情况下,你的搜索就会限制在满足特定模式的5位数范围内了。 

  假如你想反其道而行之,要找出所有不匹配“1___5”模式的SKU条目。那么你只需要在刚才语句例子中的LIKE前面加上NOT就可以了。 

  BETWEEN 

  假设你想取出一定范围内的数据,而且你事先知道范围的起点和终点,那么你不妨采用BETWEEN 判断词。现在就让我们假设你想选取给定表内范围在 1和 10之间的记录。你可以如下使用BETWEEN: 

  …WHERE ID BETWEEN 1 AND 10 

  或者你也可以采用已经熟悉的数学判断字句:

  …WHERE ID >= 1 AND ID >= 10 

  4,联合语句 

  我们到目前为止所谈到的SQL语句相对较为简单,如果再能通过标准的recordset循环查询,那么这些语句也能满足一些更复杂的要求。不过,何必非要拘泥在浅尝则止的基础水准之上呢?你完全可以再增加其他一些符号,比如AND、OR和NOT来完成更强大的功能。 

  以下面的SQL语句为例:

SQL ="SELECT c_firstname,c_lastname,c_email FROM customers WHERE c_email

 IS NOT NULL AND c_purchase ='1' OR c_purchase ='2' AND c_lastname LIKE 'A%'" 

  你目前所掌握的SQL知识,以上的例子也不难解释,不过上面的语句并没有很明白地让你看清条件字句是如何胶合在单一个SQL语句中的。 

  多行语句 

  在SQL语句不好懂的情况下,你不妨把整个语句分解为多行代码,然后在现有变量基础上逐步增加查询语句的各个组成部分并把它存在同一变量内:

SQL = "SELECT c_firstname,c_lastname,c_emailaddress,c_phone" 
SQL = SQL & " FROM customers" 
SQL = SQL & " WHERE c_firstname LIKE 'A%' and c_emailaddress NOT NULL" 
SQL = SQL & " ORDER BY c_lastname, c_firstname" 

  到了最后一句,SQL变量就包含了以下的完整SELECT 语句:

"SELECT c_firstname, c_lastname, c_emailaddress, c_phone FROM customers

 WHERE c_firstname LIKE ‘A%’ and c_emailaddress NO NULL ORDER BY

 c_lastname,c_firstname" 

  整句照上面分解之后显然好读多了!在进行调试的时候,你或许更乐于多敲几个字符把程序改得更好读些。不过你可要记住了,在封闭引号之前或者在打开引号之后你需要增加空格,这样才能保证字符串连接起来的时候你没有把几个词凑到了一块。 

  5,开始执行

  在学会了SELECT语句的构造和用途之后你就该学习如何使用它了。在你所掌握的数据库工具下,这可能意味着你得按下某个写着“执行”字样的按钮。在ASP网页上,可以立即执行SQL语句也可以当作存储过程调用。 

  一旦创建了SQL 语句,你还得设法访问其查询结果。显然,这里的关键就是ASP recordset。为了充分利用你更为熟悉的SQL技能,你需要调整常规ASP网页上最常采用的recordset: 

Dim rs 
Set rs = Server.CreateObject ("ADODB.Recordset") 
rs.Open SQL,Conn,1,2 

  这里Conn就是数据库连接声明,而唯一的修改就是在rs.Open,之后用包含SQL语句的变量代替了要查询的数据表的名称。 

  这种方法的优点之一是你可以指定游标类型(如以上1 ,2 所示)。 

  执行SQL 

  你还可以用紧凑的一行代码执行SQL语句来创建recordset。以下是语法: 

Dim rs 
set rs = Conn.Execute(SQL)

  在上例中,你所看到的SQL是你存放自己SQL SELECT 语句的变量。该代码行“运行”SQL语句(或者说对数据库进行查询),选取数据并把数据存放在recordset 内,在上例中就是变量rs。这种方法的主要缺点是你不能选择自己想采用的游标类型。相反,recordset总是用前向游标打开。 

  因为游标的缘故,你或许打算熟悉两种创建recordset的方法。直接执行查询节省了键入字符所消耗的时间,但那样的话你就得采用默认的游标了,这样有可能遭遇经常不能正常运行的毛病。不管你具体采用哪种办法,两者之间的最大的差别也不外乎代码精练与否。在不考虑你取得什么字段、你的标准是什么的前提下,也不管你如何存储数据,采用SQL式的recordset 在体积上会比ASP上打开的标准recordset 要小得多,更别提操作起来的简易性了。毕竟,通过过滤数据,你消除了耗费时间的if-then 测试和可能用到的循环。 

  6,存储查询

  当你的查询相对简单的时候,每次从头开始创建SQL语句也不费什么工夫,不过,复杂的查询就不同了,每次都从头来会产生很多开发错误。因此,一旦让SQL顺利地运行起来,你最好把它们存起来,在需要时再调用它们。这样,哪怕是一个简单查询你都能随时用上存储的查询语句了。 

  假设你每周都要给团队做一次报告,指出目前存在的业务支持问题,这些数据需要从你的数据库中选取,而且要按照日期选择记录,同时根据你所在团队所采用的支持问题的类别排序。一旦你设计了这一查询,你何必以后每周都重新编写一次呢?不要在你的HTML页面上创建查询,你应该用你的数据库工具创建查询并且保存它。 然后你可以采用ActiveCommand 属性把查询插入到你的ASP网页。头一两回你可能会觉得没啥意思,其实也就几行代码而已:

Set objSQ = Server.CreateObject ("ADODB.Command") 
objSQ.ActiveConnection = "databaseName" 
objSQ.CommandText = "storedQueryName" 
objSQ.CommandType = adCmdStoredProc 
set objRec = objSQ.Execute 

  注意,采用adCmdStoredProc 表示你已经在页面上包含了adovbs.inc 文件。该文件定义了你可以按照名字而非数字进行访问的Access常数。只需要在页面上包含该文件即可),然后你就可以用adCmdStoredProc 这类名字了。这样,将来你再看到的时候更容易理解以上被存储的查询到底是个什么意思。

  7,ORDER BY 

  从Access数据库中选取记录有件最令人丧气的事情,它们是以怎样的顺序输入到数据库内就按照怎样的顺序出来。就算你在Access环境内采用Sort By来改变记录视图,数据表内的记录顺序也并没有发生改变。 

  如果你正在使用ASP recordset在网页上写出记录,那么你或许知道乱纷纷的顺序是多令人痛苦的事。但是你可能不得不经常得面对这一问题,因为并不存在什么简单方便的解决方案。好在ORDER BY 可以简化这一难题。 

  为了对你的结果排序,只要在SELECT语句末尾加上ORDER BY,然后指定你需要排序的参照列即可。因此,如果你想要根据顾客的姓氏对Customers表排序,那么你可以编写如下的查询语句: 

  SQL = "SELECT c_lastname,c_firstname,c_email FROM Customers ORDER BY c_lastname"

  这样,只要你建立了recordset而且开始把结果写到屏幕上,你就会看见数据按照字母顺序排列起来了。

  8. 记录统计

  确定数据库内有多少记录,或者确定有多少记录达到了某些标准,这些用ASP完成并非难事。如果你采用了正确的游标类型,你可以用RecordCount 属性获得记录数当然也可以用recordset。但是,有个更简单的办法,这就是在自己的SELECT语句中采用count(*) ,代码如下所示:

  SQL = "SELECT count(*) FROM Customers"

  或者

  SQL = "SELECT count(*) FROM Customers WHERE c_lastname LIKE 'A%'"

  举例说明,以下代码将选出一些记录以及这些记录的总数:

SQL = "SELECT c_firstname, c_lastname, count(*) FROM Customers WHERE c_lastname LIKE 'A%'" 

  但是你不能实现自己的目的。这里采用的“count”函数其实是一种集合函数,意思是只返回单行信息:回答你提出的问题。对第1个SELECT 语句来说,问题是“在客户表内有多少条记录?”查询返回单一的值作为响应,因此它不能同你常规的查询相组合。假如你希望得到其他数据,你需要采用RecordCount。 

  集合函数除了“count”之外还包括AVG、MIN、MAX和SUM等。

  9. 连接
  
  任何熟悉SQL和关系数据库的人都遇见过大量的连接类型。最简单的说,连接(join)会把两个表的内容组合到一个虚拟表或者recordset内。假如数据表有效地规一化,或许你会经常从某一个表中选出特定的信息再从另一个表中选出关联信息。这样做就需要简单的“同等连接(equijoin)”。

Posted in asp编程 | Tagged , , | Leave a comment

Flash AS---调入外部文本和加载外部mp3文件

在Flash制作时,有时候为了更灵活、方便,我们可以直接调入外部文本文件。要修改时只要修改记事本里的文本并保存,无需打开Flash源文件对其修改。例如,我们要制作一个网络mp3播放器,网络mp3的地址和曲名我们都可以保存在一个文本中,要添加或者修改网络mp3的地址或曲名,我们只需要在这个文本进行编辑就可以了。

  本节知识要点

  1、LoadVars 类

  LoadVars 类是 loadVariables() 函数的替代方法,用于在 Flash 应用程序和服务器之间传输变量。可以使用 LoadVars 类在下载时获取成功数据加载、进度指示和流数据的验证信息。

  2、LoadVars.load()

  LoadVars类的方法,my_lv.load(url):从指定的 URL 下载变量,分析变量数据,并将结果变量放在 my_lv 中。

  3、LoadVars.onLoad

  LoadVars类的事件处理函数,用法:

 my_lv.onLoad = function(success) {
 // 此处是您的语句
 }

  success 该参数指示加载操作是成功完成 (true) 还是以失败结束 (false)。如果该操作成功,my_lv 将填充为该操作所下载的变量,而这些变量将在调用此处理函数时变为可用。

  4、my_str.split("delimiter", [limit])

  拆分字符或字符串的方法。delimiter 拆分 my_str 所依据的字符或字符串。limit 要放入数组中的项目数。此参数是可选的。

  在指定的 delimiter 参数出现的所有位置断开 String 对象,将其拆分为多个子字符串,然后以数组形式返回这些子字符串。

5、my_sound.loadSound("url", isStreaming)

  方法;将 MP3 文件加载到 Sound 对象中。可以使用 isStreaming 参数指示该声音是事件声音(false)还是声音流(true)。事件声音在完全加载后才能播放;声音流在下载的同时播放。当接收的数据足以启动解压缩程序时,播放开始。

  6、Sound.onSoundComplete用法:

my_sound.onSoundComplete = function(){      // 此处是您的语句
     }

  事件处理函数;当声音播放完时自动调用。您可以使用此处理函数在声音播放完毕后触发 SWF 文件中的事件。

  例题--简单网络mp3播放器

  制作思路:

  1、把网络mp3的地址和对应曲名分别作为一个字符变量保存在文本文件中,把两个mp3的地址之间用“,”隔开,两个曲名之间也用“,”隔开;

  2、再用loadVars类的事件处理函数my_lv.onLoad把这个文本中的两个变量调入my_lv中;

  3、然后把my_lv中的两个变量利用my_str.split("delimiter", [limit])根据“,”分拆为两个数组(网络mp3的地址和曲名);

  4、利用my_sound.loadSound("url", isStreaming)从网络mp3的地址的数组中加载mp3;用动态文本显示从曲名的数组中选择出的对应曲名;

  5、用Sound事件处理函数my_sound.onSoundComplete,在播放完一曲后,自动加载下一曲。

注意:外部文本文件应该和加载它的swf文件在同一文件夹下,或者在同一网络下。

  打开3.10.fla文件:

  在第1帧上的AS脚本:

 System.useCodepage = true;
      //使用运行播放器的操作系统的传统代码页来解释外部文本文件,避免出现乱码
 ming = [];          //定义(歌名)数组
 dizhi = [];         //定义mp3的网络地址数组
 var myLoad = new LoadVars();//定义LoadVars这个类
 myLoad.load("yinyue.txt"); //指定LoadVars载入yinyue.txt这个文件
 myLoad.onLoad = function(success) { //载入LoadVars类的事件处理函数
  if (success) {          //如果载入成功
   dizhi = this.dizhi.split(",");
    //把存入myLoad的外部文本yinyue.txt中变量dizhi中以“,”分隔的部分作为数组dizhi的元素
   ming = this.geming.split(","); //同上类似
   shu = ming.length;      //用变量shu保存数组ming的长度
  }
 };
  mySound = new Sound();     //创建 Sound 对象。
  i = 0;             //初始化变量i
  function diaoyy(gm, mp3) {   //设置自定义函数,函数名为diaoyy
   bian = i+1+".";       //给动态文本赋值(歌曲编号)
   txt = gm;          //给动态文本赋值(歌曲名)
   mySound.stop();        //停止前面的播放
   mySound.loadSound(mp3, true);//按声音流调网络歌曲mp3
   mySound.start();      //开始播放调入的网络歌曲mp3
   mySound.onSoundComplete = function() { //当音乐播放完毕时执行下面的命令
     i++;
     if (i == shu) {        //变量i等于歌曲总数时
      i = 0;
     }
    diaoyy(ming[i], dizhi[i]);  //调自定义函数(歌曲名,网络地址)
   };
  }

  在“播放”按扭上的AS脚本:

 

 on (release) {
  diaoyy(ming[i], dizhi[i]);  //调自定义函数(歌曲名,网络地址)
 }

  作业

  1、由3.9.fla文件上其它几个按扭添加脚本(根据按扭名称),使这个播放器增加随机播放与顺序播放;播放上一曲或者下一曲;暂停和停止功能,如下图。

  2、由3.9.fla文件进行改动,使播放器有下图所具有的功能.

Posted in asp编程 | Tagged , , , | Leave a comment

flash播放器动态读取MP3音频

很多网页中都插有Flash播放代码,这不仅是为了页面元素的多样化,更是为了内容体现的需要。很
多时候,我们会遇到这样的问题:根据需要使用Flash的script来读取不同的音频源或者视频源,那么如何实现这一功能呢?下面我们用改写<object>标签中的代码来实现。

一个典型的Flash播放器源代码中常常有这样的语句:
<param name="movie" value="http://mydomin/example.swf" />

这里我们可以修改其中的value值为value=http://mydomin/example.swfvideoSource=http://mydomin/video/songs/1.mp3

也就是说此时的example.swf将调用http://mydomin/video/songs/1.mp3这样一个音频源
(当然也可能是视频)。这样,你的Flash就可以在_root得到videoSource的变量值即_root.videoSource=http://mydomin/video/songs/1.mp3

下面是一个实例:

在使用DW插入名称为mediaFla的SWF之后,在SWF的路径后面加上参数"sourceURL=music1.mp3"
,如下:

<object classid="clsid :D 27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7
,0,19,0" width="32" height="32">
<param name="movie" value="mediaFla.swfsourceURL=http://mydomin/music1.mp3" />
<param name="quality" value="high" />
<embed src="11" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="32" height="32"></embed>
</object>

这样,在制作Flash的时候,使用script中的_root.sourceURL就可以获得变量值“http://mydomin/music1.mp3”了,从而读取这个音频源。

Posted in asp编程 | Tagged , , | Leave a comment